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

J2ME 2D 遊戲入門之旅(五):爆炸特效與導彈道具實作

     編輯:J2ME

特效層與邏輯層的通訊

遊戲特效(爆炸、煙霧等)常覆蓋在遊戲畫面上,但與邏輯層有時序依賴:爆炸期間凍結玩家輸入、等待動畫結束再顯示分數。簡易做法是使用全域旗標 gameOver 協調,但會導致硬編碼、難以擴展。理想架構應採用狀態機 + 回呼介面,本文仍以簡易旗標示範。

爆炸效果實作

// 單次初始化
Image expImg = ImageTools.getImage("/pic/explosion.png"); // 32x32 多幀圖
explosion = new GameObject(expImg, 32, 32);

// 每局初始化
explosion.reset();
explosion.lifetime = 3; // 3 幀

// 主迴圈中
if (gameOver) {
    explosion.paint(g);
    explosion.update(); // 內部遞減 lifetime
    if (!explosion.alive) {
        plane.alive = false;
        // 繪製結束畫面、分數評語...
    }
}

GameObject 內建 lifetime(幀數)與 alive 旗標,update() 每幀遞減,歸零則標記死亡。

導彈道具邏輯

if (bomb.alive) {
    bomb.moveTo(plane.x - 20, plane.y - 20); // 跟隨飛機
    bomb.paint(g);
    bomb.update();
    bullets.killBullets(plane.sprite, 32); // 半徑 32 內子彈全清
}

導彈本質是一個特效物件,啟用時呼叫 Bullets.killBullets() 清除範圍內敵彈。

架構反思

  • 生命週期不應綁定在 GameObject:有的特效按時間、有的按幀、有的按事件結束。建議抽出 EffectController 統一管理。
  • 硬編碼的代價:全域旗標耦合邏輯與特效,擴展新特效需修改主迴圈。後續應改為:
    • 飛機實作狀態機(正常、被擊中、爆炸中、死亡)
    • 特效實作 Effect 介面,含 onComplete() 回呼
    • 主迴圈維護特效堆疊,逐幀更新並處理回呼

下一步預告

補充獎懲系統(分數、生命、道具掉落),並嘗試重構為可擴展的組件化架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved