在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使得游戲更加逼真。