`

j2me中实现人物走动经典案例,一维数组实现

    博客分类:
  • J2ME
阅读更多
            j2me中实现人物走动经典案例分析

//底层屏幕类
package com.canvas.image02;

import java.io.IOException;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class ExCanvas extends Canvas {

	// 用一维数组实现人物图片的走动

	public Image imbg;// 背景图片
	public Image imPlayer;// 人物图片

	// 根据图片定义人物动作方向的数组
	public int upImage[] = { 12, 13, 14, 15 }; // 上
	public int downImage[] = { 0, 1, 2, 3 }; // 下
	public int leftImage[] = { 4, 5, 6, 7 }; // 左
	public int rightImage[] = { 8, 9, 10, 11 }; // 右

	// 初始化人物的当前帧
	public int nowPlayer = 0;

	// 定义人物的方向:
	public static final int DIR_UP = 1; // 上
	public static final int DIR_DOWN = 2; // 下
	public static final int DIR_LEFT = 3; // 左
	public static final int DIR_RIGHT = 4; // 右
	public static final int DIR_STOP = -1; // 停止

	// 初始化人物起初的方向
	public int dir = DIR_STOP;
	// 初始化人物的坐标值
	public int px = 80, py = 80;

	// 创建内容类的线程:
	class Mythread extends Thread {
		public void run() {
			while (true) {
				if (dir >= 1 && dir <= 4) { // 当人物走动时,才执行当前帧的变化
					nowPlayer++;// 当前帧自增
				}
				switch (dir) {
				case DIR_UP: // 上
					//人物走动
					py -= 8;
					if (py <= 0) {
						py = getHeight();
					}
					//人物在该方向的帧变化范围
					if (nowPlayer >= 15) {
						nowPlayer = 12;
					}
					break;
				case DIR_DOWN: // 下
					py += 8;
					if (py >= getHeight()) {
						py = 0;
					}
					if (nowPlayer >= 3) {
						nowPlayer = 0;
					}
					break;
				case DIR_LEFT: // 左
					px -= 8;
					if (px <= 0) {
						px = getWidth();
					}
					if (nowPlayer >= 7) {
						nowPlayer = 4;
					}
					break;
				case DIR_RIGHT: // 右

					px += 8;
					if (px >= getWidth()) {
						px = 0;
					}
					if (nowPlayer >= 11) {
						nowPlayer = 8;
					}
					break;
				default:
					break;
				}
				try {
					Thread.sleep(200);
					repaint();
				} catch (InterruptedException e) {
					System.out.println("线程内容有误....");
					e.printStackTrace();
				}
			}
		}
	}

	public Mythread mth; // 定义线程对象

	public ExCanvas() {
		mth = new Mythread();// 初始化线程对象
		try {
			// 加载图片
			imbg = Image.createImage("/bg.png");
			imPlayer = Image.createImage("/Player.png");
		} catch (IOException e) {
			System.out.println("加载图片异常信息....");
			e.printStackTrace();
		}
		mth.start();// 启动线程
	}

	protected void paint(Graphics arg0) {
		// 加载背景图片
		arg0.drawImage(imbg, 0, 0, Graphics.LEFT | Graphics.TOP);// 背景图片,对齐方式左上
		// 加载人物图片
		arg0.setClip(px, py, 32, 48);// 剪裁区 在坐标(80,80)处开始剪裁宽32 高48的区域
		arg0.drawImage(imPlayer, px - nowPlayer % 4 * 32, py - nowPlayer / 4
				* 48, Graphics.LEFT | Graphics.TOP);//移动图片的操作

	}

	public void keyPressed(int keyCode) {
		if (keyCode == -1 || keyCode == 50) {// 上
			dir = DIR_UP;
			nowPlayer = 12;// 初始化人物方向的第一帧

		}
		if (keyCode == -2 || keyCode == 56) {// 下
			dir = DIR_DOWN;
			nowPlayer = 0;// 初始化人物方向的第一帧
		}
		if (keyCode == -3 || keyCode == 52) {// 左
			dir = DIR_LEFT;
			nowPlayer = 4;// 初始化人物方向的第一帧
		}
		if (keyCode == -4 || keyCode == 54) {// 右
			dir = DIR_RIGHT;
			nowPlayer = 8;// 初始化人物方向的第一帧
		}
		// if (keyCode == -5 || keyCode == 53) {// 停止
		// dir = DIR_STOP; //当按键时人物停止
		// }
	}

	public void keyReleased(int keyCode) { // 当释放键时人物停止
		if (keyCode == -1 || keyCode == 50) {// 上
			dir = DIR_STOP;
			nowPlayer = 12;// 人物停止在当前方向的第一帧

		}
		if (keyCode == -2 || keyCode == 56) {// 下
			dir = DIR_STOP;
			nowPlayer = 0;// 人物停止在当前方向的第一帧
		}
		if (keyCode == -3 || keyCode == 52) {// 左
			dir = DIR_STOP;
			nowPlayer = 4;// 人物停止在当前方向的第一帧
		}
		if (keyCode == -4 || keyCode == 54) {// 右
			dir = DIR_STOP;
			nowPlayer = 8;// 人物停止在当前方向的第一帧
		}
	}

	public void keyRepeated(int keyCode) {

	}

}




//运行程序类
package com.canvas.image02;

import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class MainApp extends MIDlet{

	public ExCanvas ec;//创建底层屏幕对象
	public MainApp(){
		ec=new ExCanvas();//初始化顶层屏幕对象
	}
	protected void startApp() throws MIDletStateChangeException {
		//获得屏幕制定屏幕显示的对象
		Display.getDisplay(this).setCurrent(ec);
	}
	
	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
		
	}

	protected void pauseApp() {
		
	}


}
//附件中的图片是人物的图片,可以下载
   本人程序由本人自己撰写,未经本人同意不能随意转载,已经发现要负责法律责任,如果您对人物走动还有迷茫,可以把能的问题发送到RedArmy.Chen@gmail.com的邮箱

  • 大小: 2.9 KB
分享到:
评论

相关推荐

    j2me 俄罗斯方块 数组版

    在这个J2ME俄罗斯方块游戏中,游戏板被表示为二维数组。每个元素代表游戏板上的一个单元格,可以为空或填充有方块的一部分。当新方块生成时,它们在数组中以特定形状存储,随着游戏进行,数组中的数据会更新以反映...

    J2ME 画布实现中文输入

    "J2ME 画布实现中文输入"这一主题,就是针对在J2ME环境下如何创建一个自定义的中文输入系统进行探讨。下面将详细解释这一技术的核心知识点。 首先,`Canvas`是J2ME MIDP(Mobile Information Device Profile)框架...

    俄罗斯方块 二位数组版 -----J2ME

    本篇文章将深入探讨一个基于J2ME的二维数组实现的俄罗斯方块项目,让我们一起走进这个经典游戏的编程世界。 俄罗斯方块,作为一款流传甚广的游戏,其核心在于各种形状的方块不断下落并排列。在J2ME中,我们通常使用...

    J2ME中实现备忘录的增删改查

    本程序实现了在J2ME中的备忘录的增加记录、删除记录、修改记录以及查询记录的功能。

    J2ME几个经典的项目

    以下将详细探讨在J2ME平台上实现的四个经典项目:贪吃蛇、俄罗斯方块、魔方和连连看。 1. **贪吃蛇** 贪吃蛇是一款深受用户喜爱的休闲游戏,玩家通过控制蛇的移动来吃食物,每次吃掉食物后,蛇的身体会变长。在...

    基于J2me5个手机游戏经典例子源代码

    开发者可能使用特定的数据结构(如二维数组或图形库)来表示游戏地图,并实现地图的加载、显示和交互功能。 4. **游戏逻辑与物理引擎**:游戏实例可能涵盖了基础的碰撞检测、角色运动、对象交互等游戏逻辑。开发者...

    j2me 实现拼图 一共三个类

    Puzzle类可能有一个二维数组来存储拼图的各个部分,通过交换相邻元素来实现拼图的移动。此外,它还可能包含一个方法用于生成初始的随机拼图状态,这通常是通过对原始图像进行切片并随机排列完成的。 2. ** Tile 类*...

    J2ME 字符型转化成字节数组

    综上所述,字符和字节数组之间的转换是J2ME开发中一个重要的知识点,对于提高程序的效率和适应性具有重要意义。通过理解并熟练掌握这些转换方法,开发者可以在各种应用场景中更加灵活地处理数据。

    J2ME中文输入Demo

    总之,"J2ME中文输入Demo"是一个实用的教学实例,可以帮助开发者了解如何在资源受限的J2ME环境中实现中文输入功能。尽管它的功能可能不够完善,但对于初学者和希望改进现有项目的人来说,是一个很好的起点。通过对`...

    J2ME实现画图程序

    在这个J2ME实现的画图程序中,我们主要关注的是如何在移动设备上利用Java Micro Edition(J2ME)框架创建一个简单的画图应用。J2ME是Java平台的一个子集,专门用于嵌入式设备,如手机和PDA。在这个程序中,核心功能...

    J2ME_Map.rar_J2ME 地图_J2ME游戏_j2me 游戏_j2me_m_绘制地图

    在J2ME中,地图通常以二维数组或网格的形式表示,每个单元格代表地图上的一个特定区域,可以是空地、建筑物、敌人位置等。通过这种方式,开发者能够轻松地实现角色移动、碰撞检测等功能。 地图绘制则涉及到图形渲染...

    J2ME table实现

    "J2ME table实现" 就是关于如何在J2ME环境中模拟创建一个具备基本功能的表格视图的过程。 J2ME 是Java的一个子集,主要针对嵌入式设备和移动设备,如手机。Canvas是J2ME中的一个基础类,它允许开发者自定义绘制图形...

    J2ME中实现电话通讯录的源代码

    在这个案例中,"J2ME中实现电话通讯录的源代码"项目运用了MVC(Model-View-Controller)设计模式,这是一种广泛用于软件工程的架构模式,特别适用于用户界面的开发。 **1. MVC设计模式详解:** - **Model(模型)**...

    J2ME小游戏合集很实用

    3. **手机游戏推箱子**:推箱子是一款经典的益智游戏,这个J2ME版本展示了如何在小屏幕设备上设计并实现逻辑复杂的游戏。开发者可以从中学习到如何使用二维数组来表示游戏地图,以及实现玩家操作的逻辑判断。 4. **...

    J2ME低级Canvas实现九宫图

    在本文中,我们将深入探讨如何使用Java Micro Edition (J2ME) 的低级Canvas组件来实现一个九宫图。九宫图,也被称为九宫格,是一种常见的布局方式,常用于游戏、菜单系统或者简单的用户界面设计。在手机平台上,J2ME...

    J2ME的RPG游戏Demo

    地图绘制在J2ME中通常使用二维数组来表示游戏世界,通过不同的值代表不同的地形或对象。开发者可能利用位图或自定义图形精灵来展示地图细节。人物移动则涉及到坐标系统和移动逻辑,确保角色能在游戏世界中平滑地移动...

    j2me新手学习全套示例源代码

    1. **人物移动**:在游戏开发中,人物移动是基础功能之一。J2ME中的移动通常通过更新对象的位置坐标并在画布上重绘来实现。开发者可能使用Timer或Game Loop机制来控制游戏循环,确保画面流畅更新。同时,了解如何...

    J2me-listJ2me-list

    根据提供的文件信息,我们可以了解到这段代码是针对Java 2 Micro Edition (J2ME)平台的一个简单示例程序,主要用于展示如何在J2ME应用中创建一个列表并处理相关的用户交互事件。下面将对这段代码涉及的关键概念和...

    J2ME中电话记录储存的实现源码

    本文将深入探讨如何在J2ME中实现电话记录的储存功能,并提供相关的源码解析。 首先,我们需要理解J2ME的基本架构。J2ME主要由配置(Configurations)和Profile(Profiles)组成,其中Mobile Information Device ...

    j2me中简单实现九宫格菜单

    本篇文章将深入探讨如何在J2ME环境中实现一个简单的九宫格菜单。 首先,我们要了解J2ME的基础知识。Java Micro Edition(J2ME)是Java平台的一个子集,用于嵌入式设备和移动设备,如手机和智能手表。它由几个配置和...

Global site tag (gtag.js) - Google Analytics