《第12章MIDP游戏编程课件.ppt》由会员分享,可在线阅读,更多相关《第12章MIDP游戏编程课件.ppt(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第12章MIDP游戏编程主讲教师:贾震斌本章目录 12.1MIDP2.0GameAPI概述 12.2游戏容器GameCanvas类 12.3游戏精灵Sprite 12.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()方法。可以取得多个同时按下的键值的组合
4、键值常量,参见教材p.20812.3游戏精灵Sprite 12.3.1帧控制 Sprite是Layer类的子类,负责主要角色图层,这个图层由一个个图像组合起来,每一个图像称为一帧,每一帧图像按照一定时间间隔显示出来形成动画 创建帧的方法如下:Sprite(Image image,int framWeidth,int frameHeight)帧的顺序也就是帧的索引值从0开始,Sprite提供了切换顺序的方法 voidsetFrame(intsequenceIndex)voidnextFrame()voidprevFrame()12.3.2精灵翻转 图像可以以任何位置为中心旋转,Sprite提供了
5、方法,如:voiddefineReferencePixel(intx,inty)voidsetRefPixelPosition(intx,inty)12.3.3碰撞检测 在GameCanvas中可以通过collidesWith()方法的不同参数的重载形式检测Sprite与Image、Sprite与Sprite、Sprite与TiledLayer之间是否相遇(即碰撞检测),方法如下:booleancollidesWith(Imageimage,intx,inty,booleanpixelLevel)ChecksforacollisionbetweenthisSpriteandthespecifi
6、edImagewithitsupperleftcorneratthespecifiedlocation.booleancollidesWith(Sprites,booleanpixelLevel)ChecksforacollisionbetweenthisSpriteandthespecifiedSprite.booleancollidesWith(TiledLayert,booleanpixelLevel)ChecksforacollisionbetweenthisSpriteandthespecifiedTiledLayer.其中参数pixelLevel表示检测模式,在MIDP2.0中定义
7、了两种模式:像素模式和边界模式。像素模式用于两个不透明的像素重叠的碰撞检测,而边界模式用于边界相接时表示相遇的情况。12.4游戏地图TiledLayer类 12.4.1游戏中的地图 Sprite将屏幕分成大小相同的网格,在每个网格里面显示一张图像,每个图像都会有一个索引值,然后组合成一个完整的图像,这种方式适合用于一个图像,并且图像很复杂的情况。TiledLayer也是将一个大图像分割成网格状,形成很多小的图像,按照需要将一些小图像组合起来,形成一个完整的图像。TiledLayer在分网格的时候,这些分割成的小图像都有一个索引值,索引时有动态和静态之分,静态索引值从1开始计数,动态索引值从-1
8、开始计数,动态索引值和静态索引值之间存在关联。TiledLayer类 构造函数:TiledLayer(intcolumns,introws,Imageimage,inttileWidth,inttileHeight)参数说明:intcolumns:网格的列数 introws:网格的行数 Imageimage:被分割的图像 inttileWidth:分割的小图宽度 inttileHeight:分割的小图高度 注:构造函数获得的是静态网格TiledLayer类 获得与静态网络关联的动态网格的方法:void setAnimatedTile(intanimatedTileIndex,intstatic
9、TileIndex)将Tiley放到指定的网络里:void 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游戏实例:蜜蜂射击 略