《J2ME手机应用开发技术课堂PPT》由会员分享,可在线阅读,更多相关《J2ME手机应用开发技术课堂PPT(31页珍藏版)》请在金锄头文库上搜索。
1、中国最大、最专业的3G移动互联网人才培养基地乐成数字通信学院乐成数字通信学院乐成数字移动通信MIDP2.0游戏开发包游戏开发包中国最大、最专业的3G移动互联网人才培养基地2 2上章回顾上章回顾介绍了手机中的RMS系统的使用方法和功能记录仓储记录记录的数据格式记录仓储的打开,关闭,删除记录的添加,修改和删除介绍了手机中音乐的播放方法Player状态音量控制播放次数中国最大、最专业的3G移动互联网人才培养基地3 3本章要点本章要点 掌握掌握MIDP2.0下的游戏开发包的结构下的游戏开发包的结构掌握游戏中的图层技术掌握游戏中的图层技术掌握游戏开发包中各类的实际用途及使用方掌握游戏开发包中各类的实际用
2、途及使用方法法中国最大、最专业的3G移动互联网人才培养基地4 44.1 游戏开发包简介游戏开发包简介MIDP 2.0相对于1.0来说,最大的变化就是新添加了用于支持游戏的API它们被放在javax.microedition.lcdui.game使用游戏开发包进行游戏开发的基本思想是:游戏的界面由图层组成背景可以在一个图层上,而游戏精灵可以在另一个图层上,每个图层都可以得到有效的控制。中国最大、最专业的3G移动互联网人才培养基地5 54.2 GameCanvas类的使用类的使用提供了专门针对游戏的功能 每个GameCanvas实例都会有一个为之创建的专用的缓冲区 可以直接得到设备键盘的物理状态
3、public class MyGameCanvas extends GameCanvas public MyGameCanvas() /调用父类的构造函数调用父类的构造函数 Super(true); /代码演示代码演示是否抑制键盘事件是否抑制键盘事件中国最大、最专业的3G移动互联网人才培养基地6 64.2.1 绘图绘图要创建一个新的GameCanvas实例,只能通过继承并调用父类的构造函数:protected GameCanvas(boolean suppressKeyEvents)与在Canvas上绘图不同,它并不需要并不需要通过paint()放法来实现屏幕的显示 为了在GameCanvas
4、上绘图,首先要获得Graphics对象,以便获得对屏幕的控制权:protected Graphics getGraphics()调用flushGraphics() 进行显示中国最大、最专业的3G移动互联网人才培养基地7 74.2.1 绘图绘图Graphics对象有以下属性 绘制目标是这个GameCanvas的缓冲区;坐标系统的原点定位在缓冲区的左上角。在完成了绘图操作后,使用flushGraphics()方法将后备屏幕缓冲区的内容输出到显示屏上输出区域的大小与GameCanvas的大小相同。演示中国最大、最专业的3G移动互联网人才培养基地8 84.2.2 键盘控制键盘控制通过调用getKeyS
5、tates()方法来查询按键的状态 获取游戏的物理键状态。 如果一个键对应的比特位的值为1,表示该键当前被按下 这种模式保证一个快速的按键和释放总是能够在游戏循环中被捕获 因为这种直接获取按键状态的方法不会主动返回当前按键的状态,最好的方法就是使用无限循环无限循环 中国最大、最专业的3G移动互联网人才培养基地9 94.2.2 键盘控制键盘控制常用按键中国最大、最专业的3G移动互联网人才培养基地10104.2.2 键盘控制键盘控制演示 public void keyEvent() int keyCode;while(true)keyCode=this.getKeyStates();/判断按键判断
6、按键if(keyCode&this.UP_PRESSED)!=0) /按了上方向按了上方向else if(keyCode&this.DOWN_PRESSED)!=0) /按了下方向按了下方向 中国最大、最专业的3G移动互联网人才培养基地总结总结GameCanvas 是将画图,按键,业务逻辑全放在run中,Canvas也可以将画图,按键,业务逻辑全放在run中游戏的三种框架1111中国最大、最专业的3G移动互联网人才培养基地12124.3 Sprite类的使用类的使用顾名思义就是精灵类主要为了用来实现游戏里面的人物动画、移动和碰撞检测而设计的 使用Sprite可以读取一个存储完整动画的大图片,然
7、后把这个大图片按照动画的每一帧分割为一个个小图片 中国最大、最专业的3G移动互联网人才培养基地13134.3.1 帧序列帧序列用于绘制Sprite的原始帧由一个单独的Image对象提供,此Image可以是可变的,也可以是不可变的 如果使用多帧,图像将按照指定的宽度和高度被切割成一系列相同大小的帧 中国最大、最专业的3G移动互联网人才培养基地14144.3.1 帧序列帧序列要创建一个静态的Sprite,可以使用它的构造函数:public Sprite(Image image)如果要创建动态的Sprite,就必须使用public Sprite(Image image,int frameWidth,
8、int frameHeight)。注意注意:源图像的宽度必须是帧宽度的整数倍,高度必须是帧高度的整数倍。否则,将会抛出IllegalArgumentException异常。代码演示中国最大、最专业的3G移动互联网人才培养基地15154.3.1 帧序列帧序列缺省的帧序列就是所有可用帧的顺序排列 可以使用setFrameSequence(int sequence)来设置帧序列 必须在帧序列中手动切换当前帧。可以调用setFrame(int), prevFrame()或者nextFrame()方法来完成 中国最大、最专业的3G移动互联网人才培养基地16164.3.2 Sprite的变换的变换看效果(
9、SpriteTransFormMidlet)并实现中国最大、最专业的3G移动互联网人才培养基地17174.3.4 碰撞检测碰撞检测(重点重点)要判断两个Sprite是否碰撞,或者与其它Layer是否碰撞,可以使用collidesWith()方法 像素级检测当非透明像素重叠时,碰撞才被检测到仅仅那些包含在Sprite的碰撞检测区内的像素会被检测。不使用像素级检测简单地检查两个Sprite的碰撞检测区矩形是否有重合。如果对Sprite应用了变换,会进行相应的处理。注意注意:只有两个Sprite都可见时,才能检测碰撞。碰撞使用 中国最大、最专业的3G移动互联网人才培养基地18184.4 Layer类
10、的使用类的使用Layer是一个抽象类,表示游戏中的一个可视元素 每个Layer都有位置(取决于它的左上角在其容器中的位置),宽度,高度和可视与否。 Layer的子类必须实现一个paint(Graphics)方法,使得它们能够被绘制 中国最大、最专业的3G移动互联网人才培养基地19194.5.1 TiledLayer类介绍类介绍TiledLayer由一系列单元格组成,单元格可被一组贴图填充 贴图(Tiles)贴图用于填充TiledLayer的单元格,由一个单一的可变或不可变的Image对象提供。图像被切割成一系列相同大小的贴图,贴图大小随Image一同指定 中国最大、最专业的3G移动互联网人才培
11、养基地20204.5.1 TiledLayer类介绍类介绍每个贴图都被赋予一个唯一的索引号位于图像最左上角的贴图被赋予索引号1(此处并不使用0)这些贴图被视为静态静态贴图它的构造函数如下:public TiledLayer(int columns,int rows,Image image,int tileWidth,int tileHeight)中国最大、最专业的3G移动互联网人才培养基地21214.5.1 TiledLayer类介绍类介绍单元格TiledLayer由相同大小的单元格组成 每个单元格的内容由贴图索引号指定正的贴图索引号代表静态贴图,负的贴图索引号代表一个动态贴图 索引号为0的贴
12、图表示该单元格为空,为空的单元格是完全透明的 setCell(int, int, int)和fillCells(int, int, int, int, int)方法改变单元格的内容 多个单元格可以包含同一个贴图。然而,一个单元格仅能包含一个贴图 中国最大、最专业的3G移动互联网人才培养基地22224.5.1 TiledLayer的绘制的绘制可以手动调用paint()方法来绘制也可以使用LayerManager对象自动绘制它 绘图方法将尝试绘制在Graphics对象的剪裁区域内的整个TiledLayer 绘制区域可以通过设置Graphics对象的剪裁区域来控制 绘制演示中国最大、最专业的3G移动
13、互联网人才培养基地2323水的区域水的区域由动态贴由动态贴图来填充图来填充中国最大、最专业的3G移动互联网人才培养基地2424地图编辑器的使用地图编辑器的使用1.new Map eachTile 24 *24 12 42.import winmap要求图片必须是bmp3.save as4.export as text中国最大、最专业的3G移动互联网人才培养基地25254.6.1 LayerManager类介绍类介绍管理一系列的Layer 每个添加的Layer都将在正确的区域并以正确的顺序被绘制。维护一个顺序列表,以便管理如何追加、插入和删除Layer 索引号为0的Layer最接近最接近用户,索
14、引号越大越大的Layer离用户越远越远 索引号永远是连续连续的,即如果一个Layer被删除,后面的Layer的索引号都将调整调整,使得索引号保持连续 中国最大、最专业的3G移动互联网人才培养基地2626北京乐成职业教育研究院北京乐成职业教育研究院北京乐成职业教育研究院北京乐成职业教育研究院可视窗口控制着可视区域及其在LayerManager的坐标系统中的位置 setViewWindow(int x,int y,int w,int h)中国最大、最专业的3G移动互联网人才培养基地27274.6.2 LayerManager的绘制的绘制paint(Graphics, int, int)方法包含一个
15、(x,y)坐标,控制可视窗口在屏幕中的显示位置append(Layer l) 向这个LayerManager添加一个LayerLayer将被添加到现有Layer列表的末尾末尾。如果此Layer已存在,将在添加前首先被删除添加前首先被删除。insert(Layer l,int index)方法与append()的区别在于可以指定Layer的索引号。remove(Layer l)中国最大、最专业的3G移动互联网人才培养基地反编译工具的使用反编译工具的使用小颖超级工具系列的使用DJ Java Decompiler 的使用2828中国最大、最专业的3G移动互联网人才培养基地2929混淆代码混淆代码代码
16、混淆在J2ME开发中是十分重要的一个步骤,它一般有两个作用 使编译后的class文件不易被反编译减小Jar文件的体积目前有很多混淆器,最常用的是RetroGuard和ProGuard Eclipse添加ProGuard WTK中添加ProGuard wtk/bin 中国最大、最专业的3G移动互联网人才培养基地3030解惑解惑在Canvas中能不能用Sprite,TiledLayer?使用Canvas来实现地图,碰撞检测的功能一定要用LayerManager吗?层是什么Sprite的翻转在游戏中会被经常用到1,Image.createImage(airplane, 0, 0, airplane.getWidth(), airplane.getHeight(), Sprite.TRANS_ROT180)2, Sprite.setTransform在游戏中实现层,翻转,碰撞时要考虑性能和手机的支持中国最大、最专业的3G移动互联网人才培养基地3131本章小结本章小结 介绍了MIDP2.0中Game API的结构介绍了Game API中各个类的使用方法和用途