上一篇忘了說,我的架構主要是參考這篇TJS實作教學的。
先講一下類別的設計:
- MovingObject:所有戰場上會移動的物件,Player及Enemy的父類別
- Player:玩家自機,畫面上那個藍點
- Enemy:敵機,不停撞過來的那些小紅點
- GameMaster:管理整個遊戲的迴圈與邏輯
- GameWindow:遊戲視窗
作用其實很簡單
- 建立一個視窗,設定大小為400x400。
- 建立一個Layer,該視窗的主要圖層。
- 然後建立一個GameMaster物件,就這樣。接下來遊戲的進行都交給GameMaster控制。
- 建立fore(前景)圖層,所有遊戲的物件都畫在這個圖層上。
- 建立玩家物件及99個敵人物件,敵人物件用一個陣列(Array)存放。
- 建立一個Timer,每25ms呼叫一次 (理想狀態下40fps),負責玩家、敵機的移動、碰撞判定。
- 之前說過這個範例不要想用到圖檔,所以我們使用正方形來表示自機與子彈。size是邊長,color是顏色
- 繼承Layer物件,建構時將自己放在fore這個圖層上
- 建構時指定顏色(子彈是紅色)及邊長。
- init函式負責初始化敵機 (在畫面的邊緣出現,向畫面內非)
- check_bound函式負責檢查敵機是否出界了,如果是的話,呼叫init來重置敵機。
- update函式負責敵機的移動
- 建構時指定顏色(藍色)
- update函式負責移動,使用System.getKeyState()來判斷方向鍵是否已被按下。
延伸練習:這只是個小小範例,我的code有滿多問題的,如果你想練習的話…
- 我忘了寫Player出界的判定,請補上
- 碰撞判定的公式其實是不對的,你發現了嗎?請修正
- Frame穩速的機制是否有比使用Timer還要好的方式呢?
- 敵機移動的速度目都只是整數,請修改init函式讓敵機的移動速度不要那麼規律。
- 找找看還有沒有其他bug吧 :)