實現玩家飛機響應式控制 (鍵盤輸入 → 幀更新) 與平鋪背景渲染,構建遊戲核心循環雛形。
輸入 → 邏輯 → 渲染 → 睡眠補齊幀時間。// 初始化
Image img = ImageTools.getImage("/pic/MyPlaneFrames.png"); // 寬24 高24 三幀橫排
plane = new GameObject(img, 24, 24);
// 重置置中
plane.reset();
plane.moveto((screenW-24)/2, (screenH-24)/2);
// 主循環渲染
plane.paint(g);
if (!gameOver) {
if (keyEvent) { // 有按鍵按下
if (keyUp) { plane.move(0, -3); plane.sprite.setFrame(0); } // 正常幀
if (keyDown) { plane.move(0, 3); plane.sprite.setFrame(0); }
if (keyLeft) { plane.move(-3, 0); plane.sprite.setFrame(1); } // 左傾幀
if (keyRight) { plane.move( 3, 0); plane.sprite.setFrame(2); } // 右傾幀
if (keyFire) { /* 開火邏輯 */ }
} else { // 無輸入
plane.sprite.setFrame(0); // 恢復正常幀
}
}
關鍵點:setFrame(index) 直接切換 Sprite 幀,實現即時視覺反饋。若需「左移播放轉向動畫」,需擴展 GameObject 支持幀序列播放。
TiledLayer 平鋪海面// 初始化
Image bgImg = ImageTools.getImage("/pic/back_water.png"); // 單張小圖
int cols = screenW / bgImg.getWidth() + 1;
int rows = screenH / bgImg.getHeight() + 1;
background = new TiledLayer(cols, rows, bgImg, bgImg.getWidth(), bgImg.getHeight());
// 填充單元格
for (int i=0; i
LayerManager?LayerManager 以 Layer 為單位統一調用 paint,一個 Layer 只能對應一個 Sprite 位置。LayerManager 模型衝突。下一篇將實現子彈群與碰撞檢測,完成核心玩法閉環。