首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

J2ME Sprite 遊戲精靈完全指南:動畫、變換與碰撞偵測

     編輯:Java 相關知識

Sprite 核心功能

Sprite 封裝角色動畫幀管理、位置、旋轉鏡像、碰撞偵測,是 2D 遊戲主角/敵人/道具的基礎類別。

圖片分割與幀管理

// 建構子:大圖、幀寬、幀高(所有幀尺寸必須相同)
Sprite sprite = new Sprite(image, frameWidth, frameHeight);

// 切換顯示幀
sprite.setFrame(index);        // 指定幀
sprite.nextFrame();            // 下一幀(循環)
sprite.prevFrame();            // 上一幀
sprite.defineFrameSequence(new int[]{0,1,2,1}); // 自訂播放序列

定位與繪製

// 設定左上角座標
sprite.setPosition(x, y);

// 繪製至 Graphics
sprite.paint(g);

旋轉與鏡像變換

常數效果
TRANS_NONE無變換
TRANS_ROT90順時針 90°
TRANS_ROT180180°
TRANS_ROT270270°
TRANS_MIRROR水平鏡像
TRANS_MIRROR_ROT90鏡像 + 90°
TRANS_MIRROR_ROT180鏡像 + 180°
TRANS_MIRROR_ROT270鏡像 + 270°
sprite.setTransform(Sprite.TRANS_ROT90);

參考像素與精確定位

預設定位點為左上角,可自訂參考點實現「腳部著地」等效果:

// 設定參考點為圖片中心底部
sprite.defineReferencePixel(frameWidth/2, frameHeight);

// 以參考點定位
sprite.setRefPixelPosition(screenX, screenY);

碰撞偵測

// 像素級碰撞(true):實際像素重疊才算撞擊
// 邊界框碰撞(false):矩形框相交即算撞擊
boolean hit = sprite.collidesWith(otherSprite, true);
  • 像素級更精確但效能較低,建議僅對主角/關鍵物件啟用
  • 大量敵人碰撞可先用邊界框粗略篩選,再做像素級精測

完整範例:玩家飛機

public class PlayerPlane extends Sprite {
    public PlayerPlane(Image img) {
        super(img, 32, 32); // 4 幀動畫
        defineReferencePixel(16, 32); // 底部中心
    }
    
    public void update(int keyStates) {
        // 移動邏輯
        if ((keyStates & LEFT_PRESSED) != 0) move(-2, 0);
        if ((keyStates & RIGHT_PRESSED) != 0) move(2, 0);
        if ((keyStates & UP_PRESSED) != 0) move(0, -2);
        if ((keyStates & DOWN_PRESSED) != 0) move(0, 2);
        
        // 動畫播放
        nextFrame();
    }
    
    public boolean checkHit(EnemyBullet bullet) {
        return collidesWith(bullet, true); // 像素級碰撞
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved