`

利用二维数组实现j2me人物走动经典案例:

    博客分类:
  • J2ME
阅读更多
//利用二维数组实现人物走动的经典案例分析 <二>
package com.canvas.image03;

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 imPlayer;// 定义人物图片
	/*
	 * 根据人物图片定义一个二维数组(4行4列) 第一列代表下,第二列代表左,第一列代表右,第一列代表上
	 */
	public int dirPlayer[][] = { { 0, 1, 2, 3 }, // 下
			{ 4, 5, 6, 7 }, // 左
			{ 8, 9, 10, 11 }, // 右
			{ 12, 13, 14, 15 } // 上
	};

	// 根据数组定义人物的方向
	public static final int DIR_DOWN = 0; // 下
	public static final int DIR_LEFT = 1; // 左
	public static final int DIR_RIGHT = 2; // 右
	public static final int DIR_UP = 3; // 上
	public static final int DIR_STOP = -1;
	// 初始化人物的方向值
	public int dir = DIR_STOP;
	//人物停止的中间变量值
	public int dirtemp=DIR_STOP;
	// 初始化人物的当前帧
	public int nowPlayer = 0;
	// 初始化人物坐标
	public int px = 80, py = 80;

	// 内部线程类控制人物的移动的速度及人物帧的变化
	class MyThread extends Thread {
		public void run() {
			while (true) {
				if (dir >= 0 && dir <= 3) { // 当人物走动时 当前帧递增
					nowPlayer++;
					if (nowPlayer >= 3) { // 对于人物方向的动作最大帧是3
						nowPlayer = 0;
					}
				}
				switch (dir) {
				case DIR_UP:
					py -= 8;
					if (py <= 0) {
						py = getHeight();
					}
					break;
				case DIR_DOWN:
					py += 8;
					if (py >= getHeight()) {
						py = 0;
					}
					break;
				case DIR_LEFT:
					px -= 8;
					if (px <= 0) {
						px = getWidth();
					}
					break;
				case DIR_RIGHT:
					px += 8;
					if (px >= getWidth()) {
						px = 0;
					}
					break;

				default:
					break;
				}
				try {
					Thread.sleep(200);
					repaint();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
//本人自己撰写,不能随意转载,如经发现要负责法律责任。
	public MyThread myt; // 定义线程对象

	public ExCanvas() {
		myt = new MyThread();// 初始化线程对象
		// 加载图片
		try {
			imPlayer = Image.createImage("/Player.png");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		myt.start();// 启动线程
	}

	protected void paint(Graphics arg0) {

		arg0.setColor(0X7f7f7f);// 定义背景颜色
		arg0.fillRect(0, 0, this.getWidth(), this.getHeight());// 矩形填充
		arg0.setClip(px, py, 32, 48);//剪裁区域 
//		System.out.println(dir+"========================");
//		System.out.println(dirtemp+"============="+nowPlayer);
		int frame=0;
		if (dir == DIR_STOP) {
			 if(dirtemp==-1){   //首次画的的人物方向为下
				 arg0.drawImage(imPlayer, px, py,
							Graphics.LEFT | Graphics.TOP);
			 }else{	           //当人物停止的时候 把人物停止到该方向的第一帧
			 frame = this.dirPlayer[dirtemp][nowPlayer]; // 等到人物当前帧的值
			 arg0.drawImage(imPlayer, px - frame % 4 * 32, py - frame / 4 * 48,
					Graphics.LEFT | Graphics.TOP);
			 }
		} else {          //当人物走动的时候 根据当前帧的变化及人物移动的速度改变人物坐标值
			frame = this.dirPlayer[dir][nowPlayer]; // 等到人物当前帧的值
			arg0.drawImage(imPlayer, px - frame % 4 * 32, py - frame / 4 * 48,
					Graphics.LEFT | Graphics.TOP);
		}
		arg0.setClip(0, 0, this.getWidth(), this.getHeight());// 重新填充
	}

	public void keyPressed(int keyCode) {   //按键处理改变人物的方向
		System.out.println(keyCode);
		if (keyCode == 50 || keyCode == -1) { // 上
			dir = DIR_UP;
		}
		if (keyCode == 56 || keyCode == -2) { // 下
			dir = DIR_DOWN;
		}
		if (keyCode == 52 || keyCode == -3) { // 左
			dir = DIR_LEFT;
		}
		if (keyCode == 54 || keyCode == -4) { // 右
			dir = DIR_RIGHT;
		}

	    if(keyCode==53 || keyCode==-5){       //人物停止
	    	dirtemp=dir;  //把人物当前方向值保留
	    	dir=DIR_STOP; 
	    	nowPlayer=0;  //定位到人物在该方向的第一帧
	    }
	}

	public void keyReleased(int keyCode) {

	}

	protected void keyRepeated(int keyCode) {
		// TODO Auto-generated method stub
		super.keyRepeated(keyCode);
	}

}
//本人自己撰写,不能随意转载,如经发现要负责法律责任。



//运行测试类
package com.canvas.image03;

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 {
		// TODO Auto-generated method stub
		
	}

	protected void pauseApp() {
		// TODO Auto-generated method stub
		
	}


}


        本案例是在一维数组的基础上实现的,也是学习j2me基础的一个积累的过程。希望同过次案例对人物走动方面的游戏,你有一个比较好的理解。
        本案例也是对j2me手机感兴趣的人和想在这方面发展的人一块分享。如果您有什么疑问请发送到RedArmy.Chen@gmail.com,我会尽快给您答复.

        以上内容是本人自己撰写,不能随意转载,如经发现要负责法律责任。

分享到:
评论

相关推荐

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

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

    j2me 俄罗斯方块 数组版

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

    J2ME几个经典的项目

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

    分享:J2ME游戏代码(代码已经初级优化)

    分享:J2ME游戏代码 分享:J2ME游戏代码 分享:J2ME游戏代码分享:J2ME游戏代码 分享:J2ME游戏代码 分享:J2ME游戏代码分享:J2ME游戏代码 分享:J2ME游戏代码 分享:J2ME游戏代码分享:J2ME游戏代码 分享:J2ME...

    J2ME手机版游戏:配对赛源代码

    这可能涉及到二维数组或者链表数据结构来存储游戏状态,以及复杂的匹配算法来检测可消除的对。 3. **动画效果**:消除图片时,为了提升用户体验,通常会添加动画效果,比如淡出、缩放或滑动消失。这些效果可能通过...

    J2ME教材:J2ME&Gaming中文版

    总的来说,“J2ME&Gaming中文版”是一本引导初学者进入J2ME游戏开发领域的教程,它将帮助你理解如何利用Java语言在移动平台上创建互动性强、趣味性高的游戏。通过深入学习和实践,你可以掌握到构建移动游戏所需的...

    J2ME人物走动

    通过上下左右键控制任务走动,可以用于迷宫等游戏……

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

    在"J2ME游戏开发中的地图设计与绘制.txt"文件中,可能详细讲解了如何规划地图结构,如何使用二维数组存储地图数据,以及如何利用J2ME的图形API高效地渲染地图。同时,文件可能还讨论了如何实现动态加载和滚动地图,...

    J2ME小游戏合集很实用

    开发者可以从中学习到如何使用二维数组来表示游戏地图,以及实现玩家操作的逻辑判断。 4. **手机版数独小游戏J2ME源码**:数独游戏在任何平台上都有广泛的受众。此源码可以帮助理解如何在J2ME上实现算法,生成和...

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

    开发者可能使用二维数组或者更复杂的结构来存储地图信息,然后在Canvas上绘制。J2ME提供了低级别的Graphics类,用于进行像素级的绘图操作,包括画线、填充、画图等。同时,了解如何优化绘制性能以适应移动设备的限制...

    j2me手机游戏案例精编电子教程

    《J2ME手机游戏案例精编电子教程》是一份深入探讨Java 2 Micro Edition (J2ME)在手机游戏开发中的应用的宝贵资源。J2ME是Java平台的一个子集,专为嵌入式设备,如早期的智能手机和平板电脑设计,它提供了开发移动...

    J2ME 经典小游戏

    **J2ME经典小游戏** Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式设备和移动设备,特别是早期的智能手机。J2ME为开发者提供了在小型设备上创建应用程序和游戏的框架。这个压缩包中的"J2ME...

    J2ME手机游戏案例精编电子教程

    J2ME手机游戏案例精编电子教程

    《J2ME嵌入式开发案例精解》-源码.zip

    《J2ME嵌入式开发案例精解》是一本专注于J2ME(Java 2 Micro Edition)技术在嵌入式领域的应用书籍。J2ME是Java平台的一个子集,主要用于移动设备、消费电器和其他资源有限的计算设备。本书提供的源码.zip文件包含了...

    J2ME手机经典游戏

    在J2ME领域,经典游戏之一就是"坦克大战"。这款游戏以其简单的操作、策略性的战斗和多样的关卡设计深受玩家喜爱。"坦克大战"的标签暗示了我们将在讨论的压缩包文件中找到一个基于J2ME实现的此类游戏。 在J2ME平台上...

    J2ME源码:五子棋

    4. **数据结构**:为了存储棋盘状态,开发者可能使用二维数组或者自定义的数据结构来表示棋盘,同时还需要跟踪每个棋子的位置。 5. **优化与性能**:考虑到J2ME运行在资源有限的设备上,代码可能进行了优化以降低...

    利用Android的Matrix类实现J2ME的drawRegion的镜像方法

    在Android开发中,Matrix类是用于处理二维图形变换的核心工具,它可以执行平移、旋转、缩放和倾斜等操作。这篇博文"利用Android的Matrix类实现J2ME的drawRegion的镜像方法"探讨了如何在Android环境中复现J2ME的`...

    J2ME游戏编程:TP319:G899 W511.iso

    J2ME游戏编程:TP319:G899 W511.iso 随书光盘,欢迎大家下载 大家共享^A^

    J2ME 字符型转化成字节数组

    ### J2ME 字符型转化成字节数组 #### 知识点一:J2ME简介 J2ME(Java 2 Platform, Micro Edition)是Sun Microsystems为嵌入式和移动设备设计的一种Java平台。它包括了一套适用于资源受限设备(如手机、PDA和个人...

Global site tag (gtag.js) - Google Analytics