J2ME手机应用开发技术

上传人:资****亨 文档编号:144398105 上传时间:2020-09-08 格式:PPT 页数:31 大小:764KB
返回 下载 相关 举报
J2ME手机应用开发技术_第1页
第1页 / 共31页
J2ME手机应用开发技术_第2页
第2页 / 共31页
J2ME手机应用开发技术_第3页
第3页 / 共31页
J2ME手机应用开发技术_第4页
第4页 / 共31页
J2ME手机应用开发技术_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《J2ME手机应用开发技术》由会员分享,可在线阅读,更多相关《J2ME手机应用开发技术(31页珍藏版)》请在金锄头文库上搜索。

1、乐成数字通信学院 ,乐成数字移动通信,MIDP2.0游戏开发包,2,上章回顾,介绍了手机中的RMS系统的使用方法和功能 记录仓储 记录 记录的数据格式 记录仓储的打开,关闭,删除 记录的添加,修改和删除 介绍了手机中音乐的播放方法 Player状态 音量控制 播放次数,3,本章要点,掌握MIDP2.0下的游戏开发包的结构 掌握游戏中的图层技术 掌握游戏开发包中各类的实际用途及使用方法,4,4.1 游戏开发包简介,MIDP 2.0相对于1.0来说,最大的变化就是新添加了用于支持游戏的API 它们被放在javax.microedition.lcdui.game 使用游戏开发包进行游戏开发的基本思想

2、是: 游戏的界面由图层组成 背景可以在一个图层上,而游戏精灵可以在另一个图层上,每个图层都可以得到有效的控制。,5,4.2 GameCanvas类的使用,提供了专门针对游戏的功能 每个GameCanvas实例都会有一个为之创建的专用的缓冲区 可以直接得到设备键盘的物理状态,public class MyGameCanvas extends GameCanvas public MyGameCanvas() /调用父类的构造函数 Super(true); /代码演示,是否抑制键盘事件,6,4.2.1 绘图,要创建一个新的GameCanvas实例,只能通过继承并调用父类的构造函数: protecte

3、d GameCanvas(boolean suppressKeyEvents) 与在Canvas上绘图不同,它并不需要通过paint()放法来实现屏幕的显示 为了在GameCanvas上绘图,首先要获得Graphics对象,以便获得对屏幕的控制权: protected Graphics getGraphics() 调用flushGraphics() 进行显示,7,4.2.1 绘图,Graphics对象有以下属性 绘制目标是这个GameCanvas的缓冲区; 坐标系统的原点定位在缓冲区的左上角。 在完成了绘图操作后,使用flushGraphics()方法将后备屏幕缓冲区的内容输出到显示屏上 输出

4、区域的大小与GameCanvas的大小相同。 演示,8,4.2.2 键盘控制,通过调用getKeyStates()方法来查询按键的状态 获取游戏的物理键状态。 如果一个键对应的比特位的值为1,表示该键当前被按下 这种模式保证一个快速的按键和释放总是能够在游戏循环中被捕获 因为这种直接获取按键状态的方法不会主动返回当前按键的状态,最好的方法就是使用无限循环,9,4.2.2 键盘控制,常用按键,10,4.2.2 键盘控制,演示,public void keyEvent() int keyCode; while(true) keyCode=this.getKeyStates(); /判断按键 if(

5、keyCode&this.UP_PRESSED)!=0) /按了上方向 else if(keyCode&this.DOWN_PRESSED)!=0) /按了下方向 ,总结,GameCanvas 是将画图,按键,业务逻辑全放在run中, Canvas也可以将画图,按键,业务逻辑全放在run中 游戏的三种框架,11,12,4.3 Sprite类的使用,顾名思义就是精灵类 主要为了用来实现游戏里面的人物动画、移动和碰撞检测而设计的 使用Sprite可以读取一个存储完整动画的大图片,然后把这个大图片按照动画的每一帧分割为一个个小图片,13,4.3.1 帧序列,用于绘制Sprite的原始帧由一个单独的I

6、mage对象提供,此Image可以是可变的,也可以是不可变的 如果使用多帧,图像将按照指定的宽度和高度被切割成一系列相同大小的帧,14,4.3.1 帧序列,要创建一个静态的Sprite,可以使用它的构造函数: public Sprite(Image image) 如果要创建动态的Sprite,就必须使用 public Sprite(Image image,int frameWidth,int frameHeight)。 注意:源图像的宽度必须是帧宽度的整数倍,高度必须是帧高度的整数倍。否则,将会抛出IllegalArgumentException异常。 代码演示,15,4.3.1 帧序列,缺省

7、的帧序列就是所有可用帧的顺序排列 可以使用setFrameSequence(int sequence)来设置帧序列 必须在帧序列中手动切换当前帧。可以调用setFrame(int), prevFrame()或者nextFrame()方法来完成,16,4.3.2 Sprite的变换,看效果(SpriteTransFormMidlet)并实现,17,4.3.4 碰撞检测(重点),要判断两个Sprite是否碰撞,或者与其它Layer是否碰撞,可以使用collidesWith()方法 像素级检测 当非透明像素重叠时,碰撞才被检测到 仅仅那些包含在Sprite的碰撞检测区内的像素会被检测。 不使用像素级

8、检测 简单地检查两个Sprite的碰撞检测区矩形是否有重合。 如果对Sprite应用了变换,会进行相应的处理。 注意:只有两个Sprite都可见时,才能检测碰撞。 碰撞使用,18,4.4 Layer类的使用,Layer是一个抽象类,表示游戏中的一个可视元素 每个Layer都有位置(取决于它的左上角在其容器中的位置),宽度,高度和可视与否。 Layer的子类必须实现一个paint(Graphics)方法,使得它们能够被绘制,19,4.5.1 TiledLayer类介绍,TiledLayer由一系列单元格组成,单元格可被一组贴图填充 贴图(Tiles) 贴图用于填充TiledLayer的单元格,由

9、一个单一的可变或不可变的Image对象提供。 图像被切割成一系列相同大小的贴图,贴图大小随Image一同指定,20,4.5.1 TiledLayer类介绍,每个贴图都被赋予一个唯一的索引号 位于图像最左上角的贴图被赋予索引号1(此处并不使用0) 这些贴图被视为静态贴图 它的构造函数如下: public TiledLayer(int columns,int rows,Image image,int tileWidth,int tileHeight),21,4.5.1 TiledLayer类介绍,单元格 TiledLayer由相同大小的单元格组成 每个单元格的内容由贴图索引号指定 正的贴图索引号代

10、表静态贴图,负的贴图索引号代表一个动态贴图 索引号为0的贴图表示该单元格为空,为空的单元格是完全透明的 setCell(int, int, int)和fillCells(int, int, int, int, int)方法改变单元格的内容 多个单元格可以包含同一个贴图。然而,一个单元格仅能包含一个贴图,22,4.5.1 TiledLayer的绘制,可以手动调用paint()方法来绘制 也可以使用LayerManager对象自动绘制它 绘图方法将尝试绘制在Graphics对象的剪裁区域内的整个TiledLayer 绘制区域可以通过设置Graphics对象的剪裁区域来控制 绘制演示,23,水的区域

11、由动态贴图来填充,24,地图编辑器的使用,new Map eachTile 24 *24 12 4 import winmap要求图片必须是bmp save as export as text,25,4.6.1 LayerManager类介绍,管理一系列的Layer 每个添加的Layer都将在正确的区域并以正确的顺序被绘制。 维护一个顺序列表,以便管理如何追加、插入和删除Layer 索引号为0的Layer最接近用户,索引号越大的Layer离用户越远 索引号永远是连续的,即如果一个Layer被删除,后面的Layer的索引号都将调整,使得索引号保持连续,26,北京乐成职业教育研究院,可视窗口 控制

12、着可视区域及其在LayerManager的坐标系统中的位置 setViewWindow(int x,int y,int w,int h),27,4.6.2 LayerManager的绘制,paint(Graphics, int, int)方法包含一个(x,y)坐标,控制可视窗口在屏幕中的显示位置 append(Layer l) 向这个LayerManager添加一个Layer Layer将被添加到现有Layer列表的末尾。 如果此Layer已存在,将在添加前首先被删除。 insert(Layer l,int index)方法与append()的区别在于可以指定Layer的索引号。 remove

13、(Layer l),反编译工具的使用,小颖超级工具系列的使用 DJ Java Decompiler 的使用,28,29,混淆代码,代码混淆在J2ME开发中是十分重要的一个步骤,它一般有两个作用 使编译后的class文件不易被反编译 减小Jar文件的体积 目前有很多混淆器,最常用的是RetroGuard和ProGuard Eclipse添加ProGuard WTK中添加ProGuard wtk/bin,30,解惑,在Canvas中能不能用Sprite,TiledLayer? 使用Canvas来实现地图,碰撞检测的功能 一定要用LayerManager吗?层是什么 Sprite的翻转在游戏中会被经常用到1,Image.createImage(airplane, 0, 0, airplane.getWidth(), airplane.getHeight(), Sprite.TRANS_ROT180)2, Sprite.setTransform 在游戏中实现层,翻转,碰撞时要考虑性能和手机的支持,31,本章小结,介绍了MIDP2.0中Game API的结构 介绍了Game API中各个类的使用方法和用途,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号