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环境下如何创建一个自定义的中文输入系统进行探讨。下面将详细解释这一技术的核心知识点。 首先,`Canvas`是J2ME MIDP(Mobile Information Device Profile)框架...
本篇文章将深入探讨一个基于J2ME的二维数组实现的俄罗斯方块项目,让我们一起走进这个经典游戏的编程世界。 俄罗斯方块,作为一款流传甚广的游戏,其核心在于各种形状的方块不断下落并排列。在J2ME中,我们通常使用...
本程序实现了在J2ME中的备忘录的增加记录、删除记录、修改记录以及查询记录的功能。
以下将详细探讨在J2ME平台上实现的四个经典项目:贪吃蛇、俄罗斯方块、魔方和连连看。 1. **贪吃蛇** 贪吃蛇是一款深受用户喜爱的休闲游戏,玩家通过控制蛇的移动来吃食物,每次吃掉食物后,蛇的身体会变长。在...
开发者可能使用特定的数据结构(如二维数组或图形库)来表示游戏地图,并实现地图的加载、显示和交互功能。 4. **游戏逻辑与物理引擎**:游戏实例可能涵盖了基础的碰撞检测、角色运动、对象交互等游戏逻辑。开发者...
Puzzle类可能有一个二维数组来存储拼图的各个部分,通过交换相邻元素来实现拼图的移动。此外,它还可能包含一个方法用于生成初始的随机拼图状态,这通常是通过对原始图像进行切片并随机排列完成的。 2. ** Tile 类*...
综上所述,字符和字节数组之间的转换是J2ME开发中一个重要的知识点,对于提高程序的效率和适应性具有重要意义。通过理解并熟练掌握这些转换方法,开发者可以在各种应用场景中更加灵活地处理数据。
总之,"J2ME中文输入Demo"是一个实用的教学实例,可以帮助开发者了解如何在资源受限的J2ME环境中实现中文输入功能。尽管它的功能可能不够完善,但对于初学者和希望改进现有项目的人来说,是一个很好的起点。通过对`...
在这个J2ME实现的画图程序中,我们主要关注的是如何在移动设备上利用Java Micro Edition(J2ME)框架创建一个简单的画图应用。J2ME是Java平台的一个子集,专门用于嵌入式设备,如手机和PDA。在这个程序中,核心功能...
在J2ME中,地图通常以二维数组或网格的形式表示,每个单元格代表地图上的一个特定区域,可以是空地、建筑物、敌人位置等。通过这种方式,开发者能够轻松地实现角色移动、碰撞检测等功能。 地图绘制则涉及到图形渲染...
"J2ME table实现" 就是关于如何在J2ME环境中模拟创建一个具备基本功能的表格视图的过程。 J2ME 是Java的一个子集,主要针对嵌入式设备和移动设备,如手机。Canvas是J2ME中的一个基础类,它允许开发者自定义绘制图形...
在这个案例中,"J2ME中实现电话通讯录的源代码"项目运用了MVC(Model-View-Controller)设计模式,这是一种广泛用于软件工程的架构模式,特别适用于用户界面的开发。 **1. MVC设计模式详解:** - **Model(模型)**...
3. **手机游戏推箱子**:推箱子是一款经典的益智游戏,这个J2ME版本展示了如何在小屏幕设备上设计并实现逻辑复杂的游戏。开发者可以从中学习到如何使用二维数组来表示游戏地图,以及实现玩家操作的逻辑判断。 4. **...
在本文中,我们将深入探讨如何使用Java Micro Edition (J2ME) 的低级Canvas组件来实现一个九宫图。九宫图,也被称为九宫格,是一种常见的布局方式,常用于游戏、菜单系统或者简单的用户界面设计。在手机平台上,J2ME...
地图绘制在J2ME中通常使用二维数组来表示游戏世界,通过不同的值代表不同的地形或对象。开发者可能利用位图或自定义图形精灵来展示地图细节。人物移动则涉及到坐标系统和移动逻辑,确保角色能在游戏世界中平滑地移动...
1. **人物移动**:在游戏开发中,人物移动是基础功能之一。J2ME中的移动通常通过更新对象的位置坐标并在画布上重绘来实现。开发者可能使用Timer或Game Loop机制来控制游戏循环,确保画面流畅更新。同时,了解如何...
根据提供的文件信息,我们可以了解到这段代码是针对Java 2 Micro Edition (J2ME)平台的一个简单示例程序,主要用于展示如何在J2ME应用中创建一个列表并处理相关的用户交互事件。下面将对这段代码涉及的关键概念和...
本文将深入探讨如何在J2ME中实现电话记录的储存功能,并提供相关的源码解析。 首先,我们需要理解J2ME的基本架构。J2ME主要由配置(Configurations)和Profile(Profiles)组成,其中Mobile Information Device ...
本篇文章将深入探讨如何在J2ME环境中实现一个简单的九宫格菜单。 首先,我们要了解J2ME的基础知识。Java Micro Edition(J2ME)是Java平台的一个子集,用于嵌入式设备和移动设备,如手机和智能手表。它由几个配置和...