在J2ME手机游戏开发中,MIDP2.0以上版本提供了一个有助于游戏制作的类,该类称为游戏精灵Sprite,在J2ME中使用游戏精灵Sprite可以简单的管理角色动画使用的frame图像。
以下我将归纳一下游戏精灵Sprite的一些核心内容。
一、图像分割
在使用Sprite类时候,只需要准备一张图像就可以构造出生动的动画效果,将要制作的动画效果使用的图像按照顺序排列后制作成一张图片,在Sprite构造方法中设定图片源跟图片的分割frame数,Sprite就能自动根据frame数对图片进行分割。
Sprite常用构造方法为:public Sprite(Image i, int frameWidth, int frameHeight)。
需要注意的是,组成图片的各个帧宽度必须相同,且像素数需要跟图片对应,否则将出现IO异常。
二、图片frame设置
经过Sprite的分割后,图片将被分成不同的独立小图片,例如一副图片由4帧图片组成,则图片的index将从0-3个不同帧对象。利用Sprite类的setFrame(int index)方法可以在游戏过程中任意指定显示哪一个frame。
相应其他方法还有nextFrame()和prevFrame()取得前后帧图像等方法。
三、精灵定位与描绘
Sprite类利用setPosition方法来指定精灵描绘的坐标点(固定点是图片的左上顶点坐标),从而定位了精灵在屏幕中的位置;在描绘精灵时,只需要把Graphics对象传递到Sprite中的paint方法中的参数就能将精灵显示。
例如:精灵对象plane
设置位置:plane.setPosition(getWidth()/2, getHeight()/2);
显示精灵:plane.paint(g);
四、精灵转动跟翻转
在游戏中经常需要使游戏对象有转动跟翻转的功能使得游戏更加生动逼真,在Sprite类中提供了方法void setTransform(int transform)来设定精灵的转动跟翻转效果,利用它我们就可以容易的让图片动起来。
参数transform预先设定了八种常量定义,这八种常量对应的效果如下:
1、TRANS_NONE: 没有进行转动和翻转;
2、TRANS_ROT90: 90度转动;
3、TRANS_ROT180: 180度转动;
4、TRANS_ROT270: 270度转动;
5、TRANS_MIRROR: 左右翻转;
6、TRANS_MIRROR_ROT90: 左右翻转后90度转动;
7、TRANS_MIRROR_ROT180: 左右翻转后180度转动;
8、TRANS_MIRROR_ROT270: 左右翻转后270度转动。
如设定精灵plane转动90度如下:
plane.setTransform(Sprite.TRANS_ROT90);
五、精灵参照点和目标定位
在Sprite中还有两个重要的方法,分别为defineReferencePixel(int x,int y)和setRefPixelPosition(int y,int y),用于设定精灵的参照点和对精灵参照点的目标定位。
如设定精灵plane的参照点跟定位点如下:
plane.defineReferencePixel(0,12);
plane.setRefPixelPosition(getWidth()/2,getHeight()/2);
六、精灵碰撞检测
在MIDP1.0中对游戏角色碰撞是通过计算物体的大小以及坐标来判断的,Sprite中提供了专门的碰撞判断方法,通过该方法可以容易的对角色是否接触进行判断。
碰撞判断常用的方法为collidesWith(Sprite sprite,boolean pixelLebel);
第一个参数为与自身可能发生碰撞的精灵对象;
第二个参数为是否像素级别碰撞检测,如果为false,则当精灵图片的边框接触时候将为碰撞发生;如果为true,则需要在当图片中真实的像素内容接触时碰撞才发生,通常设定为true使得游戏更加逼真。
凤凰涅槃/浴火重生/马不停蹄/只争朝夕
隐姓埋名/低调华丽/简单生活/完美人生