Tech.Days 筆記 : Windows Phone 7 遊戲開發 - 使用 XNA
- Windows Phone 7 的硬體支援
- 800 * 480 的解析度
- 多點觸控 (目前支援四點)
- ARMv7 CPU
- Back, Start, Search 硬體按鍵
- Windows Phone 7 上的遊戲開發
- Silverlight (支援事件驅動)
- XNA
- XBOX Live (撰寫線上遊戲)
- XNA 4.0 的功能與特性
- 整合遊戲平台, 開發工具與類別庫開發
- 包含 : (1) Microsoft Cross-Platform Audio Creation Tools 3 (XACT3) 聲音的編輯工 (2) XNA Framework Remote Performance Monitor (用來記錄遠端裝置的效能監視器)
- 可支援發展 Windows, XBox/XBox 360, Zune/Zune HD, Windows Phone 7 開發 ( 可輕鬆複製專案並發行 )
- 要發佈 XBOX 360 遊戲需要加入 XNA Creator Club, 每年 US $99 或是每季 US $49
- 要發佈 XBOX 360 遊戲, 主機需要買硬碟版本而非無線網路版
- XNA 4.0 的優勢
- 可以降低 Garbage (支援 Garbage Collection )
- 最佳化 Math 函式庫 (透過 MathHelper 類別) , 用於 3D 圖形運算支援
- 效能較好的 API
- 支援的 Content Pipeline
- 3D 模型
- 2D 圖形
- 音效/音樂
- 字型
- XNA 遊戲程式的基本 Life Cycle:
- 遊戲開始 (建立 Game)
- 初始化 (建立 GraphicsDeviceManager, 就是管理螢幕畫面的類別)
- 載入內容 (呼叫 LoadContent 方法)
- 遊戲進行 (呼叫 Update 與 Draw 方法)
- 不斷重複 Step 4. 直到遊戲結束
- 釋放資源 (呼叫 UloadContent 方法)
- 遊戲結束 (呼叫 Exit 方法)
- Update 方法的呼叫時機
- 預設為 fixed-step 模式, IsFixedTimeStep 為 True
- Game 的 TargetElapsedTime 預設為 1/60, 原則上每 1/60 秒呼叫 Update 和 Draw 一次
- PC 和 XBOX : 1/60 秒
- Zune 與 Windows Phone 7 : 1/30 秒
- 如果 1/60 秒內沒有辦法完成 Update, 則 IsRunningSlowly 會被系統設定為 True. 之後, 僅會呼叫 Update 而不呼叫 Draw 以讓系統跟上更新的頻率
- 如果始終無法跟上, 則放棄 1/60 秒
- 只緣身在迴圈中
- Update 與 Draw 就是迴圈型態在執行
- 了解是否有必要在 Update 與 Draw 內寫迴圈 (會形成迴圈中的迴圈, 常常不是開發人員想要的畫面效果)
- Update 方法的呼叫時機 Cont.
- variable-step 模式
- 不斷地呼叫 Update 與 Draw
- Contenet Pipeline 的處理流程
- 可支援型態的檔案類型, 會透過 Importer 載入 Content DOM
- 經過 Processor 的 Content Compiler 處理後, 會變成 .XNB 檔案由 Content Manager 在執行時期管理
- Contenet Pipeline 支援格式
- .fbx
- .fx , .x
- 字型描述檔案 .spritefont
- 圖片檔 (紋理 texture) : .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, .tga
- XACT 建立的聲音檔 (.xap), .mp3, .wmv, .wma
- 不支援格式會造成執行時期 LoadContent 失敗, 無法進行遊戲
- 不支援格式需要字型撰寫 Importer
- XNA 常用類別
- 2D 與 3D : Texture2D, Model
- 座標 : Vector2(二維 xy ), Vector3(三維 xyz), Vector4
- 碰撞偵測 : (1) BoundingBox 建立元件的邊框模型, 缺點是比較不精確 (雖然是 2D 下使用, 但是需搭配 Vector3 z軸填 0 ) (2) BoundingSphere : 3D邊框模型, 比較貼和元件
- 遊戲核心 : Game , GameComponent
- 音效與音樂 : (1) SoundEfffect (簡易版, 播放後無法在控制) (2) SoundEffectInstance (3) MediaPlayer
- 載入控制 : (1) KeyBoardState 鍵盤 (2) TouchState 觸控 (3) MouseState 滑鼠 (4) GamePadState 遊戲搖桿
- 3D 模型 : Matrix, ModelMesh, ModelBone, BasicEffect
- 其他 : (1) GameTime (記錄遊戲開始至結束的時間狀態) (2) SpriteBatch (繪圖) (3) SpriteFont (繪文字) (4) MathHelper (數學運算)