2D/3D 遊戲離不開動畫。XNA 中實現動畫核心在於 Update 改變狀態,Draw 繪製新幀。
在 Game1.Update() 修改 Sprite 位置座標,下一次 Draw() 即顯示新位置。
如爆炸效果,製作一系列圖片代表各狀態,合成單一大圖(Sprite Sheets),每小圖尺寸一致。

Update 中切換顯示索引,Draw 使用 sourceRectangle 繪製對應區域。
Frame Rate:每秒重繪次數。XNA 預設 60fps(人眼無閃爍最低刷新率)。可透過 TargetElapsedTime 調整:
base.TargetElapsedTime = new TimeSpan(0,0,0,0,10); // 10ms = 100fps
實際幀率受硬體限制,XNA 會自動略過 Draw。可用 GameTime.IsRunningSlowly 偵測。
修改 TargetElapsedTime 影響所有動畫。需讓單一動畫以固定速率運行(不超過主幀率與硬體上限):
int timeSinceLastFrame = 0;
int millisecondsPerFrame = 50; // 20fps
// 在 Update 中
timeSinceLastFrame += gameTime.ElapsedGameTime.Milliseconds;
if (timeSinceLastFrame > millisecondsPerFrame) {
timeSinceLastFrame -= millisecondsPerFrame;
// 切換至下一幀
}
將此邏輯封裝於 Sprite 基類,即可讓不同 Sprite 以各自速率動畫。
下一節將講解滑鼠、鍵盤輸入事件捕捉。