《MIDP游戏开发》PPT课件.ppt_第1页
《MIDP游戏开发》PPT课件.ppt_第2页
《MIDP游戏开发》PPT课件.ppt_第3页
《MIDP游戏开发》PPT课件.ppt_第4页
《MIDP游戏开发》PPT课件.ppt_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

第8章MIDP游戏开发,本章学习导航,本章学习要点,(1)游戏API简介;(2)GameCanvas类的使用;(3)Sprite类的使用;(4)TiledLayer类的使用;(5)LayerManager类的使用。,8.1游戏API简介,在MIDP2.0中利用javax.microedition.lcdui.game包中的类进行游戏开发。在javax.microedition.lcdui.game包中使用的是MIDP中的低级图形类Images和Graphics等。因此,可以结合这些图形类进行游戏的开发。在javax.microedition.lcdui.game包中提供了5个主要类以实现游戏开发。,Game包概述,8.1游戏API简介,GameCanvas是一个提供了游戏的基本接口的抽象类。这个类与Canvas类相比有两个优点:一是它拥有屏幕缓冲;二是它可以直接得到设备键盘的物理状态。Layer是一个定义了游戏元素的抽象类。Sprite和TiledLayer继承了这个类,Layer是一个非常常用的类。LayerManager负责管理Layer对象,并且按照指定的顺序画他们。Sprite包含了若干帧图像的Layer。这些帧保存在Image对象中,通过Sprite类我们可以只使用其中的部分帧,或者通过播放一个帧的序列来创建一个动画。Sprite类还能检查它是否与其他的Sprite类或者TiledLayers有重合。TiledLayer和Sprite有点相似,但是它更多的被用来创建背景,比如赛道或者其他更大的区域。TiledLayer包含一个表格,我们可以用图像或者文字来填充他。所以说一个背景或者一个场景是可以用一系列的小图片来创建的。,Game包概述,8.2GameCanvas类的使用,GameCanvas类概述,GameCanvas是为了方便游戏开发的Canvas类,从类的实现上,可以看出GameCanvas类是Canvas类的子类,它继承了MIDP1.0中在使用的javax.microedition.lcdui.Canvas类,因此GameCanvas类可以直接使用Canvas类的方法。,8.2GameCanvas类的使用,super(true),【例8-1】ch21_1.java,教师演示讲解,8.2GameCanvas类的使用,键盘状态,应用GameCanvas类,主要是通过对图形的控制实现动态的效果,这些控制通常都是通过手机键盘来实现的。因此,在使用GameCanvas类绘图时需要获得指定键盘的按下状态,并进行相关的移动操作。GameCanvas类中,提供了相关的按键常量来获得键盘被按下的状态,这些常量用来表示手机键盘上的游戏按键。,8.2GameCanvas类的使用,GameCanvas类概述-设备键盘的物理状态,GameCanvas使用getKeyStates()可以直接获得键盘码,不像Canvas必须通过keyPressed才能获得键盘的键盘码。以下代码分别验证了键盘是否按下了左键和右键:intkeyState=getKeyStates();if(keyState,8.2GameCanvas类的使用,键盘状态实例,【例8-1】ch21_2.java,ch21_2.java,教师演示讲解,Thread线程,多线程,两种实现方法:1、通过继承Thread方法开发多线程程序classprintThreadextendsThreadpublicvoidrun()print();printThreadpt=newprintThread();pt.start();2、通过实现Runnable接口开发多线程程序classprintRunnableimplementsRunnablepublicvoidrun()print();printRunnablepr=newprintRunnable();Threadpt=newThread(pr);pt.start();,publicvoidprint()while(true)frm.append(“Hellon”);tryThread.sleep(1000);catch(Exceptione),8.2GameCanvas类的使用,GameCanvas类概述-屏幕缓冲,GameCanvas本身就是使用双缓存技术实现图形或者图像的屏幕输出,不需要开发人员编写自己的屏幕缓冲代码。GameCanvas的使用流程如下:(1)通过getGraphics()获得图形接口(画笔);(2)绘制图形;(3)通过flushGraphics()将图形显示在屏幕上。根据上述流程,在GameCanvas类中绘制一个黑色方块的代码如下:Graphicsg=this.getGraphics();g.setColor(0,0,0);g.fillRect(20,20,20,20);flushGraphics();,工具类,用Random类生成随机数,java.util.Random类提供了生成随机数的方法。publicRandom();publicRandom(longseed);PublicdoublenextDouble();PublicintnextInt();Randomrnd=newRandom();rnd.nextInt(100);/生成0,100)之间的随机整数,工具类,Random()简单绘图实例,【例8-1】ch21_randomline.java,教师演示讲解,【任务1】查阅MIDPAPI,查看javax.microedition.lcdui.game中的主要类并了解这些类的主要功能。【任务2】编写程序,利用GameCanvas类实现简单图形的显示和移动。,课堂实践,课堂实践8-1,8.3Sprite类的使用,在JavaME手机游戏开发中,MIDP2.0以上版本提供了一个有助于游戏制作的类,该类称为Sprite(也称为精灵),在JavaME中使用游戏精灵Sprite可以简单的管理角色动画使用的frame图像。,Sprite类概述,8.3Sprite类的使用,Sprite类常用方法,8.3Sprite类的使用,Sprite类利用setPosition方法来指定精灵描绘的坐标点(固定点是图片的左上顶点坐标),从而定位了精灵在屏幕中的位置;在描绘精灵时,只需要把Graphics对象传递到Sprite中的paint方法中的参数就能将Sprite对象显示。例如:设置精灵对象spriteTank位置的方法:spriteTank.setPosition(getWidth()/2,getHeight()/2);显示精灵对象spriteTank的方法:spriteTank.paint(g);,Sprite帧和帧序列Sprite定位与绘制,8.3Sprite类的使用,Sprite类实例,【例8-3】演示Sprite类显示图像的方法1MIDlet2.java,教师演示讲解,8.3Sprite类的使用,Sprite类中提供了方法setTransform方法来设定精灵的旋转和翻转效果,利用它我们就可以容易的让图像动起来。例如,设定精灵spriteTank转动90度的代码如下:spriteTank.setTransform(Sprite.TRANS_ROT90);,Sprite的变换,8.3Sprite类的使用,Sprite旋转和翻转的效果如下图所示,Sprite的变换,8.3Sprite类的使用,Sprite类实例,【例8-3】演示Sprite类显示图像的方法2MIDlet1.java,教师演示讲解,8.3Sprite类的使用,在实际开发中,经常通过定义其他的点的位置来进行Sprite的绘制,这个点就称为参考像素。在Sprite中提供了两个重要的方法,分别为defineReferencePixel(intx,inty)和setRefPixelPosition(inty,inty),用于设定精灵的参考像素(参照点)和对精灵参照点的目标定位。spriteTank.defineReferencePixel(0,12);/sprite上的点spriteTank.setRefPixelPosition(getWidth()/2,getHeight()/2);/屏幕上的点,参考像素,8.3Sprite类的使用,参考像素实例,【例8-3】演示Sprite类显示图像的方法2MIDlet3.java,教师演示讲解,8.3Sprite类的使用,在MIDP1.0中对游戏角色碰撞是通过计算物体的大小以及坐标来判断的,Sprite中提供了专门的碰撞判断方法,通过该方法可以容易的对角色是否接触进行判断。碰撞判断常用的方法为:collidesWith(Spritesprite,booleanpixelLebel);sprite:与自身可能发生碰撞的精灵对象;pixelLebel:为是否像素级别碰撞检测。pixelLebel为false时,表示当精灵图像的边框接触时候认为碰撞发生,这种检测方法也称为边界检测;可以通过defineCollisionRectangle方法指定对象发生碰撞的确边界区域。pixelLebel为true时,表示当图像中真实的像素内容接触时碰撞才发生,通常设定为true使得游戏更加逼真。,碰撞检测,8.3Sprite类的使用,碰撞检测实例,【例8-3】演示Sprite类显示图像的方法4MIDlet4.java,教师演示讲解,8.3Sprite类的使用,在使用Sprite类时候,只需要准备一张图像(包含多个相关的帧)就可以构造出生动的动画效果。首先,将要制作的动画效果使用的图像按照顺序排列后制作成一张图片,在Sprite构造方法中设定图片源和图片的分割帧数,Sprite就能自动根据frame数对图片进行分割。Sprite用于构造可以动的Sprite对象的方法为:publicSprite(Imagei,intframeWidth,intframeHeight)参数含义如下:Image:原始图像;frameWidth:帧的宽度;frameHeight:帧的高度。,Sprite帧和帧序列图像分割,8.3Sprite类的使用,Sprite帧和帧序列图像分割,8.3Sprite类的使用,经过Sprite的分割后,图片将被分成不同的独立小图像,例如一副图片由4帧图像组成,则图片的index将为0到3的不同的帧对象。利用Sprite类的setFrame方法可以在游戏过程中任意指定显示那一帧。方法的使用方法如下:spriteTank.setFrame(INDEX_OF_DOWN)其中INDEX_OF_DOWN代表分割后的图像在原始图片中的位置。也可以通过nextFrame方法指定下一帧或通过prevFrame方法指定上一帧。,Sprite帧和帧序列图片帧的设置,8.3Sprite类的使用,碰撞检测实例,【例8-3】演示Sprite类显示图像的方法4MIDlet5.java,教师演示讲解,8.4Layer相关类的使用,MIDP2.0提供我们用于构建游戏地图的TiledLayer类。TiledLayer类是一些由一些单元格组成的网格状的可视化组件,借助于单元格的内容可以组成很大的可视化层,在实际开发中,该类的作用是用于构建游戏地图和跑道等,我们能使用TiledLayer容易的构建形象美观的各种地图背景。,TiledLayer概述,8.4Layer相关类的使用,TiledLayer常用方法,8.4Layer相关类的使用,TiledLayer类的构造方法原型如下:publicTiledLayer(intcolumns,introws,Imageimage,inttiledWidth,inttiledHeight);其参数含义如下:columns:指定了图层的列数;rows:指定了图层的行数;image:指定了在图层中使用的图片Image对象;tiledWidth:指定了image中小图片的宽度;tiledHeight:指定了image中小图片的高度。TiledLayer的用法:TiledLayermap;image=Image.create(/tl.png);map=newTiledLayer(9,9,image,image.getWidht()/9,image.getHeight();,TiledLayer用法,8.4Layer相关类的使用,MIDP2.0中的游戏API提供了一个图层管理类LayerManager,根据准确的位置跟图层次序来渲染它管理下的各个图层,也就是说使用管理的方式来处理图层之间的层叠关系因,因此在图层变化过程中容易的对图层进行添加和删除操作。,LayerManager概述,8.4Layer相关类的使用,ViewWindow控制着用户可视的区域,他的位置是相对于LayerManager的坐标系统的。通过改变可视窗口的位置我们就可以制作出屏幕滚动的效果。利用LayerManager类的setViewWindow方法,可以用来定位图层在屏幕中显示的区域。,LayerManagerViewWindow,8.4Layer相关类的使用,使用LayerManager的一般步骤为:(1)创建LayerManager对象LayerManagerlayerManager=newLayerManager();(2)通过append方法来增加图层layerManager.append(spriteTank);layerManager.append(spriteBack);(3)定位屏幕可视区域layerManager.setViewWindow(

温馨提示

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

评论

0/150

提交评论