J2ME中的 GAME API介绍[8]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

厂商可以使用任何希望使用的技术(如硬件加速可以用于所有Sprite,或特定大小的Sprite,或者根本不使用硬件加速)来实现Sprite。对一些平台而言,特定大小的Sprite可能对于其它大小的Sprite更高效;厂商可以选择提供给开发者关于设备相关的这些特性。

 

6.3.6   碰撞检测

Sprite非常适合移动的物体,如游戏主角、敌人等等,在游戏中,可以使用Sprite提供的碰撞检测功能来简化游戏逻辑。

 

使用defineCollisionRectangle()定义用于碰撞检测的Sprite的矩形区域。此指定的矩形是相对于未经变换的Sprite的左上角,该区域将用于检测碰撞。对于像素级的碰撞检测,仅仅在这个碰撞检测区内部的像素点会被检查。缺省的,Sprite的碰撞检测区定位在(0,0),并与Sprite尺度相同。碰撞检测区也可以指定为大于或小于缺省的碰撞检测区;如果大于缺省的碰撞检测区,在Sprite之外的像素在像素级的碰撞检测时被认为是透明的。

 

要判断两个Sprite是否碰撞,或者与其他Layer是否碰撞,可以使用collidesWith()方法。如果使用像素级检测,仅当非透明像素重叠时,碰撞才被检测到。即第一个Sprite中的非透明像素和第二个Sprite中的非透明像素重叠时,碰撞才被检测到。仅仅那些包含在Sprite的碰撞检测区内的像素会被检测。

 

如果不使用像素级检测,这个方法就简单地检查两个Sprite的碰撞检测区矩形是否有重合。 如果对Sprite应用了变换,会进行相应的处理。注意,只有两个Sprite都可见时,才能检测碰撞。

 

6.4    Layer的使用

Layer是一个抽象类,表示游戏中的一个可视元素。上节中讲述的Sprite就是Layer的一种。每个Layer都有位置(取决于它的左上角在其容器中的位置),宽度,高度和可视与否。 Layer的子类必须实现一个paint(Graphics)方法,使得它们能够被渲染。如果该Layer可见。 Layer从它的左上角开始渲染,其当前坐标(x,y)是相对于原始的Graphics对象。当渲染Layer时,应用程序可以使用剪辑和坐标变换来控制并限制渲染的区域。实现此方法的子类有责任检查Layer是否可见,如果不可见,这个方法应该不做任何事。此外,调用此方法不应该改变Graphics对象的属性(剪辑区域,坐标变换,绘图颜色等等)。

 

本文关键:J2ME中的 GAME API介绍
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top