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

XNA Game Studio Express 開發教學(3):理解遊戲迴圈與 Screen 架構

     編輯:關於C語言

遊戲迴圈核心

XNA 以 Game 類別封裝迴圈:

static void Main()
{
    using (var game = new SpacewarGame()) game.Run();
}

Run() 內部持續呼叫 Tick → Update → Draw,直到視窗關閉。

Spacewar 狀態機制

  • GameState 列舉:LogoSplash、TitleScreen、SelectionScreen、EvolvedScreen、VictoryScreen 等。
  • ChangeState 切換狀態,建立對應的 Screen 衍生類別實例。
  • 每個 Screen 封裝該狀態專屬的 Update、Draw、資源與輸入處理。

主要類別關係

Game (XNA)
 └─ SpacewarGame : Game
      ├─ BeginRun() → 播放片頭音樂、建立初始相機、ChangeState(LogoSplash)
      ├─ ChangeState(GameState) → 實例化對應 Screen
      ├─ Update() → currentScreen.Update()
      └─ Draw()   → currentScreen.Render()

Screen (抽象基類)
 ├─ TitleScreen : FullScreenSplash : Screen
 ├─ SelectionScreen : Screen
 ├─ SpacewarScreen : Screen
 │    ├─ EvolvedScreen : SpacewarScreen
 │    └─ RetroScreen   : SpacewarScreen
 └─ VictoryScreen : Screen

SpacewarScreen 核心成員

public class SpacewarScreen : Screen
{
    protected Projectiles bullets;
    protected Ship ship1, ship2;
    protected SceneItem sun;
    protected Particles particles;
    protected SceneItem backdrop;
    protected bool paused = true;
    protected int player1Score, player2Score;
    // ...
}

包含所有遊戲實體(飛船、子彈、粒子、太陽、背景)與分數狀態。

更新與繪製流程

  • Game.Tick (由 Idle 事件觸發) → Game.Update → SpacewarGame.Update → currentScreen.Update
  • Game.DrawFrame → Game.Draw → SpacewarGame.Draw → currentScreen.Render
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved