《第12章MIDP游戏编程课件》由会员分享,可在线阅读,更多相关《第12章MIDP游戏编程课件(17页珍藏版)》请在金锄头文库上搜索。
1、第12章MIDP游戏编程主讲教师:贾震斌本章目录12.1MIDP2.0GameAPI概述12.2游戏容器GameCanvas类12.3游戏精灵Sprite12.4游戏地图TiledLayer类12.5图层管理LayerManager类12.6游戏实例:蜜蜂射击本章学习目标了解MIDP游戏编程基本概念、常用类及方法、基本程序框架12.1MIDP2.0GameAPI概述12.1.1GameAPI类库简介MIDP提供了GameCanvas类库实现游戏编程所需功能,GameCanvas是Canvas的扩展为了便于操控图像,可以使图像中不同的内容位于不同的层面上,这就是图层的概念,如让人物和背景位于不同
2、的图层上。对每一图层可以分别管理、操控。为此,MIDP提供了图层功能,图层由类Layer实现,而多个图层的管理又由LayerManger类负责。不同的图层叠加在一起形成了一个完整的图像。由于受屏幕大小限制,图像可能无法完全显示出来,LayerManger类提供了观察窗口ViewWindow,通过移动观察窗口实现图像不同部分的显示。图层中有两个特殊图层:Sprite和TiledLayer,Sprite存放游戏角色,TiledLayer存放游戏背景12.2游戏容器GameCanvas类12.2.1屏幕缓冲每一个GameCanvas对象创建时首先在内存中开辟屏幕大小的缓冲区,在缓冲区中绘制图形,需要
3、时再将缓冲区内容复制到屏幕上GameCanvas使用过程创建GameCanvas对象,同时在内存中创建缓冲区建立Graphics对象,调用GameCanvas的getGraphics()方法,获得Graphics对象,通过Graphics对象往内存中绘图,绘图过程与Canvas中不同的是绘图过程不一定要在paint()方法中调用GameCanvas的flushGraphics()方法将图像送到屏幕上12.2.2获得键盘输入状态利用继承于Canvas类的键盘按键事件利用GameCanvas专用的getKeyStates()方法。可以取得多个同时按下的键值的组合键值常量,参见教材p.20812.3
4、游戏精灵Sprite12.3.1帧控制Sprite是Layer类的子类,负责主要角色图层,这个图层由一个个图像组合起来,每一个图像称为一帧,每一帧图像按照一定时间间隔显示出来形成动画创建帧的方法如下:Sprite(Image image, int framWeidth, int frameHeight)帧的顺序也就是帧的索引值从0开始,Sprite提供了切换顺序的方法voidsetFrame(intsequenceIndex)voidnextFrame()voidprevFrame()12.3.2精灵翻转图像可以以任何位置为中心旋转,Sprite提供了方法,如:voiddefineRefere
5、ncePixel(intx,inty)voidsetRefPixelPosition(intx,inty)12.3.3碰撞检测在GameCanvas中可以通过collidesWith()方法的不同参数的重载形式检测Sprite与Image、Sprite与Sprite、Sprite与TiledLayer之间是否相遇(即碰撞检测),方法如下:booleancollidesWith(Imageimage,intx,inty,booleanpixelLevel)ChecksforacollisionbetweenthisSpriteandthespecifiedImagewithitsupperlef
6、tcorneratthespecifiedlocation.booleancollidesWith(Sprites,booleanpixelLevel)ChecksforacollisionbetweenthisSpriteandthespecifiedSprite.booleancollidesWith(TiledLayert,booleanpixelLevel)ChecksforacollisionbetweenthisSpriteandthespecifiedTiledLayer.其中参数pixelLevel表示检测模式,在MIDP2.0中定义了两种模式:像素模式和边界模式。像素模式用于
7、两个不透明的像素重叠的碰撞检测,而边界模式用于边界相接时表示相遇的情况。12.4游戏地图TiledLayer类12.4.1游戏中的地图Sprite将屏幕分成大小相同的网格,在每个网格里面显示一张图像,每个图像都会有一个索引值,然后组合成一个完整的图像,这种方式适合用于一个图像,并且图像很复杂的情况。TiledLayer也是将一个大图像分割成网格状,形成很多小的图像,按照需要将一些小图像组合起来,形成一个完整的图像。TiledLayer在分网格的时候,这些分割成的小图像都有一个索引值,索引时有动态和静态之分,静态索引值从1开始计数,动态索引值从-1开始计数,动态索引值和静态索引值之间存在关联。T
8、iledLayer类构造函数:TiledLayer(intcolumns,introws,Imageimage,inttileWidth,inttileHeight)参数说明:intcolumns:网格的列数introws:网格的行数Imageimage:被分割的图像inttileWidth:分割的小图宽度inttileHeight:分割的小图高度注:构造函数获得的是静态网格TiledLayer类获得与静态网络关联的动态网格的方法:void setAnimatedTile( intanimatedTileIndex, intstaticTileIndex )将Tiley放到指定的网络里:voi
9、d setCell(intcol, introw, inttileIndex)将Tiley放到指定区域的网络里:void fillCells(intcol, introw, intnumCols, intnumRows, inttileIndex)12.5图层管理LayerManager类图层的概念就是将图像分层处理叠加显示形成完整游戏图像,图层用Layer类处理,各图层的管理由LayerManager负责。LayerManager类的方法将各图层添加到屏幕上:voidappend(Layerlayer)删除某个图层:voidremove(Layerlayer)插入某个图层:voidinsert(Layerlayer,intindex)设置视图观察窗口:voidsetViewWindow(intx,inty,intwidth,intheight)图层显示:voidpaint(Graphicsg,intx,inty)Layer类的方法将图层添加到画布上:void setPosition(intx, inty)移动图层:void move(intdx, intdy)显示或隐藏图层:void setVisible(booleanvisible)12.6游戏实例:蜜蜂射击略