1、更多精彩请关注更多精彩请关注复选框。单击“下一步”。 选CLDC1.0 MIDP1.0,(4). 将 J2ME Wireless Toolkit 作为选定的目标平台。(5). 单击“完成”。IDE 将创建 $PROJECTHOME./HuaRongDao 项目文件夹。该项目文件夹包含所有的源和项目元数据,如项目 Ant 脚本。此时将在“项目”窗口中打开 HuaRongDao 项目。 (6). 现在,我们来添加一个MIDlet,右键单击项目,选新建MIDlet,名字为HuaRongDao,不要写package.点确定生成,然后在生成后的 代码里加入CommandListener支持,代码框架如下
2、:/* * HuaRongDaoMidlet.java * * Created on 2005年7月1日, 下午8:18*/import javax.microedition.midlet.*;import javax.microedition.lcdui.*;/* author lin* version*/ public class HuaRongDaoMidlet extends MIDlet implements CommandListener public void startApp() public void pauseApp() public void destroyApp(boo
3、lean unconditional) public void commandAction(Command c, Displayable d) 3. 开始编码(1)加入退出按钮,这里,我们用TextBox这种高级UI来做例子: private Display display; private final static Command CMD_EXIT = new Command(退出, Command.EXIT, 1);public HuaRongDaoMidlet() display = Display.getDisplay(this); public void startApp() Tex
4、tBox t = new TextBox(TextBox的第一个参数,TextBox的第二个参数,256,0); t.addCommand(CMD_EXIT); t.setCommandListener(this); display.setCurrent(mainList); . public void commandAction(Command c, Displayable d) if (c = CMD_EXIT) destroyApp(false); notifyDestroyed();注意:A.关于j2me的api函数,可以在WTK的docs目录当中查到。B.我们使用的是MIDP1.0的
5、函数,2.0支持游戏函数,但是大部分原先的手机都不支持。C.TextBox是可输入框,有标题,缺省内容和内容长度等参数。(2)创建一个处理图片的类Images, 处理图片的方式在2.0当中有了很大的改进,可以直接从一张图片中按照坐标取一部分,但是1.0还没有这个功能,所以我们使用Image数组来实现。首先,我们先来显示一个图片,来熟悉一下有关image的操作。首先,加入一个Image和包含它的ImageItem,因为Image本身不能显示,必须包在ImageItem中,然后创建一个Form,把ImageItem加到Form中,最后在屏幕上显示这个Form。 Image a; ImageItem
6、 i; Form props = new Form(测试页); try a = Image.createImage(/Duke.png i = new ImageItem(java吉祥物,a,ImageItem.LAYOUT_DEFAULT,图片无法显示 props.append(i); catch (IOException e) a = null; props.addCommand(CMD_EXIT); props.setCommandListener(this); display.setCurrent(props);编译运行一下,发现没有图片,说明或者是指定的图片位置不对或者是系统没有找到
7、,其中,createImage()中的文件路径是关于项目根目录/res/的,没有错,因此是系统没有找到res目录。File|HuaRongDaoproperty,选择Libraries and Resources,把res的完全路径加进去,再编译就可以了。好了,测试成功了,现在可以开始编写Images类,如下:/* author linpublic class Images /保存常量 /绘图位置常量 public static final int UNIT = 20;/方块的单位长度 public static final int LEFT = 20;/画图的左边界顶点public stat
8、ic final int TOP = 22;/画图的上边界顶点 /地图位置常量 public static final int WIDTH = 4;/地图的宽度 public static final int HEIGHT = 5;/地图的高度 /地图标记常量 public static final byte CAOCAO = (byte) a; /曹操的地图标记 public static final byte MACHAO = (byte) b/马超的地图标记 public static final byte HUANGZHONG = (byte) c/黄忠的地图标记 public sta
9、tic final byte GUANYU = (byte) d/关羽的地图标记 public static final byte ZHANGFEI = (byte) e/张飞的地图标记 public static final byte ZHAOYUN = (byte) f/赵云的地图标记 public static final byte ZU = (byte) g/卒的地图标记 public static final byte BLANK = (byte) h/空白的地图标记 public static final byte CURSOR = (byte) i/光标的地图标记 /地图组合标记
10、常量 public static final byte DLEFT = (byte) 1 /组合图形左边标记 public static final byte DUP = (byte) 2 /组合图形上边标记 public static final byte DLEFTUP = (byte) 3 /组合图形左上标记 /图片常量 /public static Image image_base;/基本图片 public static Image image_Zhaoyun;/赵云的图片 public static Image image_Caocao;/曹操的图片 public static Im
11、age image_Huangzhong;/黄忠的图片 public static Image image_Machao;/马超的图片 public static Image image_Guanyu;/关羽的图片 public static Image image_Zhangfei;/张飞的图片 public static Image image_Zu;/卒的图片 public static Image image_Blank;/空白的图片 public static Image image_Frame;/游戏框架的图片 public Images() /构造函数 public static
12、 boolean init() /初始化游戏中用到的图片 try 以下的实现都是基于MIDP2.0的,我们在程序中采用的是基于MIDP1.0的实现 image_base = Image.createImage(/huarongroad/BITBACK.png image_Frame = Image.createImage(image_base, 126, 0, 145, 177,Sprite.TRANS_NONE); /Sprite类是用来翻转图片的,是MIDP2.0新新增加的支持游戏的特性 image_Zhaoyun = Image.createImage(image_base, 0, 0,
13、 UNIT, 2 * UNIT,Sprite.TRANS_NONE); image_Caocao = Image.createImage(image_base, UNIT, 0, 2 * UNIT,2 * UNIT, Sprite.TRANS_NONE); image_Huangzhong = Image.createImage(image_base, 3 * UNIT, 0, UNIT,2 * UNIT,Sprite.TRANS_NONE); image_Machao = Image.createImage(image_base, 0, 2 * UNIT, UNIT,2 * UNIT,Spr
14、ite.TRANS_NONE); image_Guanyu = Image.createImage(image_base, UNIT, 2 * UNIT,2 * UNIT, UNIT,Sprite.TRANS_NONE); image_Zhangfei = Image.createImage(image_base, 3 * UNIT, 2 * UNIT,UNIT, 2 * UNIT,Sprite.TRANS_NONE); image_Zu = Image.createImage(image_base, 0, 4 * UNIT, UNIT, UNIT,Sprite.TRANS_NONE); im
15、age_Blank = Image.createImage(image_base, 1 * UNIT, 4 * UNIT,UNIT,UNIT,Sprite.TRANS_NONE); image_Frame = Image.createImage(/frame.png image_Zhaoyun = Image.createImage(/zhaoyun.png image_Caocao = Image.createImage(/caocao.png image_Huangzhong = Image.createImage(/huangzhong.png image_Machao = Image.
16、createImage(/machao.png image_Guanyu = Image.createImage(/guanyu.png image_Zhangfei = Image.createImage(/zhangfei.png image_Zu = Image.createImage(/zu.png image_Blank = Image.createImage(/blank.png return true; catch (Exception ex) return false;这里提一下图形格式,一般来说,MIDP1.0只支持png格式,而且对有些png还无法读取,因此在图片做好了以后
17、一定要测试一下,测试方法可以是用NetBeans的调试功能,在运行旁边有一个Debug .按钮,就是进入调试,可以在创建图形的语句处下端点,然后看能否成功。用NetBeans开发J2ME游戏实例讲解(二)58 | 作者:196 (3).建立Draw类用来显示图形:public class Draw /* Creates a new instance of Draw */ public Draw(Canvas canvas) public static boolean paint(Graphics g, byte img, int x, int y) /在地图的x,y点绘制img指定的图片 pa
18、int(g, img, x, y, Images.UNIT);/把地图x,y点转化成画布的绝对坐标,绘图 catch (Exception ex) public static boolean paint(Graphics g, byte img, int x, int y, int unit) switch (img) case Images.CAOCAO:/画曹操 /变成绝对坐标,并做调整 g.drawImage(Images.image_Caocao, Images.LEFT + x * unit, Images.TOP + y * unit,Graphics.TOP | Graphics
19、.LEFT); break; case Images.GUANYU:/画关羽 g.drawImage(Images.image_Guanyu, Images.LEFT + x * unit, case Images.HUANGZHONG:/画黄忠 g.drawImage(Images.image_Huangzhong, Images.LEFT + x * unit, case Images.MACHAO:/画马超 g.drawImage(Images.image_Machao, Images.LEFT + x * unit, Images.TOP + y * unit, Graphics.TO
20、P | Graphics.LEFT); case Images.ZHANGFEI:/画张飞 g.drawImage(Images.image_Zhangfei, Images.LEFT + x * unit, case Images.ZHAOYUN:/画赵云 g.drawImage(Images.image_Zhaoyun, Images.LEFT + x * unit, Images.TOP + y * unit, Graphics.TOP | Graphics.LEFT); case Images.ZU:/画卒 g.drawImage(Images.image_Zu, Images.LEFT + x * unit, case Images.BLANK:/画空白 g.drawImage(Images.image_Blank, Images.LEFT + x * unit, case Images.CURSOR:/画光标 g.drawRect(Images.LEFT + x * unit, Images.TOP + y * unit,Images.UNIT,Images.UNIT);(4)建立Map类来读取布局信息:package HuaRongDao;import java.io.InputStream;public class Map /处理游戏的地图,负责从外部
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1