J2ME手机应用开发技术-5_第1页
J2ME手机应用开发技术-5_第2页
J2ME手机应用开发技术-5_第3页
J2ME手机应用开发技术-5_第4页
J2ME手机应用开发技术-5_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

乐成数字通信学院 乐成数字移动通信 MIDP2 0游戏开发包 2 上章回顾 介绍了手机中的RMS系统的使用方法和功能记录仓储记录记录的数据格式记录仓储的打开 关闭 删除记录的添加 修改和删除介绍了手机中音乐的播放方法Player状态音量控制播放次数 3 本章要点 掌握MIDP2 0下的游戏开发包的结构掌握游戏中的图层技术掌握游戏开发包中各类的实际用途及使用方法 4 4 1游戏开发包简介 MIDP2 0相对于1 0来说 最大的变化就是新添加了用于支持游戏的API它们被放在javax microedition lcdui game使用游戏开发包进行游戏开发的基本思想是 游戏的界面由图层组成背景可以在一个图层上 而游戏精灵可以在另一个图层上 每个图层都可以得到有效的控制 5 4 2GameCanvas类的使用 提供了专门针对游戏的功能每个GameCanvas实例都会有一个为之创建的专用的缓冲区可以直接得到设备键盘的物理状态 publicclassMyGameCanvasextendsGameCanvas publicMyGameCanvas 调用父类的构造函数Super true 代码演示 是否抑制键盘事件 6 4 2 1绘图 要创建一个新的GameCanvas实例 只能通过继承并调用父类的构造函数 protectedGameCanvas booleansuppressKeyEvents 与在Canvas上绘图不同 它并不需要通过paint 放法来实现屏幕的显示为了在GameCanvas上绘图 首先要获得Graphics对象 以便获得对屏幕的控制权 protectedGraphicsgetGraphics 调用flushGraphics 进行显示 7 4 2 1绘图 Graphics对象有以下属性绘制目标是这个GameCanvas的缓冲区 坐标系统的原点定位在缓冲区的左上角 在完成了绘图操作后 使用flushGraphics 方法将后备屏幕缓冲区的内容输出到显示屏上输出区域的大小与GameCanvas的大小相同 演示 8 4 2 2键盘控制 通过调用getKeyStates 方法来查询按键的状态获取游戏的物理键状态 如果一个键对应的比特位的值为1 表示该键当前被按下这种模式保证一个快速的按键和释放总是能够在游戏循环中被捕获因为这种直接获取按键状态的方法不会主动返回当前按键的状态 最好的方法就是使用无限循环 9 4 2 2键盘控制 常用按键 10 4 2 2键盘控制 演示 publicvoidkeyEvent intkeyCode while true keyCode this getKeyStates 判断按键if keyCode this UP PRESSED 0 按了上方向 elseif keyCode this DOWN PRESSED 0 按了下方向 总结 GameCanvas是将画图 按键 业务逻辑全放在run中 Canvas也可以将画图 按键 业务逻辑全放在run中游戏的三种框架 11 12 4 3Sprite类的使用 顾名思义就是精灵类主要为了用来实现游戏里面的人物动画 移动和碰撞检测而设计的使用Sprite可以读取一个存储完整动画的大图片 然后把这个大图片按照动画的每一帧分割为一个个小图片 13 4 3 1帧序列 用于绘制Sprite的原始帧由一个单独的Image对象提供 此Image可以是可变的 也可以是不可变的如果使用多帧 图像将按照指定的宽度和高度被切割成一系列相同大小的帧 14 4 3 1帧序列 要创建一个静态的Sprite 可以使用它的构造函数 publicSprite Imageimage 如果要创建动态的Sprite 就必须使用publicSprite Imageimage intframeWidth intframeHeight 注意 源图像的宽度必须是帧宽度的整数倍 高度必须是帧高度的整数倍 否则 将会抛出IllegalArgumentException异常 代码演示 15 4 3 1帧序列 缺省的帧序列就是所有可用帧的顺序排列可以使用setFrameSequence int sequence 来设置帧序列必须在帧序列中手动切换当前帧 可以调用setFrame int prevFrame 或者nextFrame 方法来完成 16 4 3 2Sprite的变换 看效果 SpriteTransFormMidlet 并实现 17 4 3 4碰撞检测 重点 要判断两个Sprite是否碰撞 或者与其它Layer是否碰撞 可以使用collidesWith 方法像素级检测当非透明像素重叠时 碰撞才被检测到仅仅那些包含在Sprite的碰撞检测区内的像素会被检测 不使用像素级检测简单地检查两个Sprite的碰撞检测区矩形是否有重合 如果对Sprite应用了变换 会进行相应的处理 注意 只有两个Sprite都可见时 才能检测碰撞 碰撞使用 18 4 4Layer类的使用 Layer是一个抽象类 表示游戏中的一个可视元素每个Layer都有位置 取决于它的左上角在其容器中的位置 宽度 高度和可视与否 Layer的子类必须实现一个paint Graphics 方法 使得它们能够被绘制 19 4 5 1TiledLayer类介绍 TiledLayer由一系列单元格组成 单元格可被一组贴图填充贴图 Tiles 贴图用于填充TiledLayer的单元格 由一个单一的可变或不可变的Image对象提供 图像被切割成一系列相同大小的贴图 贴图大小随Image一同指定 20 4 5 1TiledLayer类介绍 每个贴图都被赋予一个唯一的索引号位于图像最左上角的贴图被赋予索引号1 此处并不使用0 这些贴图被视为静态贴图它的构造函数如下 publicTiledLayer intcolumns introws Imageimage inttileWidth inttileHeight 21 4 5 1TiledLayer类介绍 单元格TiledLayer由相同大小的单元格组成每个单元格的内容由贴图索引号指定正的贴图索引号代表静态贴图 负的贴图索引号代表一个动态贴图索引号为0的贴图表示该单元格为空 为空的单元格是完全透明的setCell int int int 和fillCells int int int int int 方法改变单元格的内容多个单元格可以包含同一个贴图 然而 一个单元格仅能包含一个贴图 22 4 5 1TiledLayer的绘制 可以手动调用paint 方法来绘制也可以使用LayerManager对象自动绘制它绘图方法将尝试绘制在Graphics对象的剪裁区域内的整个TiledLayer绘制区域可以通过设置Graphics对象的剪裁区域来控制绘制演示 23 水的区域由动态贴图来填充 24 地图编辑器的使用 newMapeachTile24 24124importwinmap要求图片必须是bmpsaveasexportastext 25 4 6 1LayerManager类介绍 管理一系列的Layer每个添加的Layer都将在正确的区域并以正确的顺序被绘制 维护一个顺序列表 以便管理如何追加 插入和删除Layer索引号为0的Layer最接近用户 索引号越大的Layer离用户越远索引号永远是连续的 即如果一个Layer被删除 后面的Layer的索引号都将调整 使得索引号保持连续 26 北京乐成职业教育研究院 可视窗口控制着可视区域及其在LayerManager的坐标系统中的位置setViewWindow intx inty intw inth 27 4 6 2LayerManager的绘制 paint Graphics int int 方法包含一个 x y 坐标 控制可视窗口在屏幕中的显示位置append Layerl 向这个LayerManager添加一个LayerLayer将被添加到现有Layer列表的末尾 如果此Layer已存在 将在添加前首先被删除 insert Layerl intindex 方法与append 的区别在于可以指定Layer的索引号 remove Layerl 反编译工具的使用 小颖超级工具系列的使用DJJavaDecompiler的使用 28 29 混淆代码 代码混淆在J2ME开发中是十分重要的一个步骤 它一般有两个作用使编译后的class文件不易被反编译减小Jar文件的体积目前有很多混淆器 最常用的是RetroGuard和ProGuardEclipse添加ProGuardWTK中添加ProGuardwtk bin 30 解惑 在Canvas中能不能用Sprite TiledLayer 使用Canvas来实现地图 碰撞检测的功能一定要用LayerManager吗 层是什么Sprite的翻转在游戏中会

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论