萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 軟體知識 >  >> 影像處理 >> Flash 教學

Flash 遊戲開發實戰:鍵盤控制旋轉坦克

從零打造可移動、砲塔獨立旋轉的坦克遊戲原型 (AS2)

本教學以一個「遙控坦克」為例,示範 ActionScript 2.0 核心語法:鍵盤事件、三角函數移動、加速度模擬、邊界循環、元件巢狀結構。適合 AS 入門者理解「程式邏輯如何驅動視覺表現」。

專案設定

  • 新建檔案:600×450 px,黑色背景,40 fps。

第一階段:砲塔獨立旋轉

  1. 建立「砲塔」元件:Ctrl+F8 新增影片剪輯「砲塔」,繪製砲塔圖形,**幾何中心對齊註冊點(十字中心)**,確保旋轉軸心正確。
    砲塔元件繪製
  2. 建立「坦克」元件(巢狀結構):新增影片剪輯「坦克」,圖層1 繪製車體,圖層2 拖入「砲塔」實例。
    坦克元件結構
  3. 砲塔旋轉代碼(掛在「砲塔」實例上):
    onClipEvent (keyDown) {
        if (Key.getCode() == 90) { // Z 鍵
            _rotation -= 6; // 逆時針 6°
        }
        if (Key.getCode() == 88) { // X 鍵
            _rotation += 6; // 順時針 6°
        }
    }

    Key.getCode() 回傳最後按下鍵的 ASCII 碼(A-Z 對應 65-90)。原則:按鍵佈局要符合人體工學。

第二階段:車體移動與物理感

  1. 回主場景,拖入「坦克」實例,掛載以下代碼:
onClipEvent (enterFrame) {
    // 移動函數:根據當前旋轉角度計算向量位移
    function move() {
        _y -= Math.cos(Math.PI/180 * this._rotation) * speed;
        _x += Math.sin(Math.PI/180 * this._rotation) * speed;
    }

    // 方向鍵控制
    if (Key.isDown(Key.UP))    move();
    if (Key.isDown(Key.DOWN))  move(); // speed 為負值時自然後退

    if (Key.isDown(Key.LEFT))  _rotation -= 3;
    if (Key.isDown(Key.RIGHT)) _rotation += 3;

    // 加速度/減速度模擬
    if (Key.isDown(Key.UP) && !Key.isDown(Key.DOWN) && speed > -3 && speed < 3)  speed += 0.1;
    if (Key.isDown(Key.DOWN) && !Key.isDown(Key.UP) && speed > -3 && speed < 3)   speed -= 0.1;

    // 惯性滑行
    if (speed > 0.1 && !Key.isDown(Key.UP) && !Key.isDown(Key.DOWN)) { move(); speed -= 0.05; }
    if (speed < -0.1 && !Key.isDown(Key.UP) && !Key.isDown(Key.DOWN)) { move(); speed += 0.05; }

    // 同時按上下鍵:快速減速歸零
    if (Key.isDown(Key.UP) && Key.isDown(Key.DOWN)) {
        speed /= 1.1;
        if (speed > -0.1 && speed < 0.1) speed = 0;
    }

    // 邊界循環(穿牆效果)
    if (_x <= 0)      _x = 600;
    else if (_x >= 600) _x = 0;
    if (_y <= 0)      _y = 450;
    else if (_y >= 450) _y = 0;
}

核心邏輯解析

  1. 封裝 move() 函數:避免重複代碼,利於維護。
  2. 三角函數分解向量:
    • Flash 座標系:Y 軸向下為正,故 `_y -= cos(角度)*speed` 實現「朝角度方向前進」。
    • `Math.PI/180` 將度轉弧度。
  3. Key.isDown() 狀態檢測:持續按住時每幀返回 true,適合移動控制;區別於 keyDown 事件(單次觸發)。
  4. 速度變量模擬慣性:加速度 0.1、摩擦係數 0.05、反向剎車 1.1 倍衰減,產生「有重量感」的操作手感。
  5. 邊界循環:超出舞台即瞬間傳送至對側,適合無邊界競技場地圖。

測試與擴展

  • Ctrl+Enter 測試:方向鍵移動、Z/X 旋轉砲塔、慣性滑行、邊界穿梭。
  • 擴展方向:發射子彈(`attachMovie` + 向量飛行)、敵人 AI、碰撞檢測 (`hitTest`)、分數系統、關卡切換。

原文參考

ZOL 軟體下載站原文

copyright © 萬盛學電腦網 all rights reserved