《XNA進階編程:Xbox 360和Windows》2-6/2-7

來源:互聯網
上載者:User

2.6問題解答

     希望本章不會有太多的難題。本章主要接觸了兩個主要問題:單元測試和Sprites。或許在Xbox 360上運行遊戲您還有些問題,我已經在第一章的結尾處寫了一些提示和技巧,您可以去看看。

     另外一個問題是理解為什麼會拋出異常,並且要如何解決它。大多數人都不會有這樣的問題,但對於少數不熟悉異常尤其是XNA異常的人來說卻是個問題。您要緊盯著異常,查看完整的堆疊追蹤,看看是否有帶有詳細描述資訊的內部異常。

     就像託管的DirectX,有時您會遇到底層DirectX Framework異常,而且有時候會很混亂,您可以到Internet和MSDN尋找對應錯誤碼的協助資訊。在這些情況下,上下文資訊(Context)要比具體的錯誤資訊本身更重要,比如,在編譯一個Shader失敗之後您會得到很奇怪的錯誤碼,此時您應該檢查Shader檔案是否存在,是否能夠被正確編譯,您的硬體是否能夠處理它,而不是努力去理解這些錯誤碼是什麼意思。您可以使用Nvidia的FX Composer工具來檢查Shader檔案是否有效。

     如果您在使用單元測試的時候遇到問題,您可以看看下一章的“問題解答”部分,那裡講了很多關於單元測試的問題。而且要記住,此處您使用的單元測試和標準的程式沒有什麼區別,您要像對待最終的應用程式一樣對它們進行調試並一步步地跟蹤。

     最後是一些在XNA中使用Sprites的提示:

  • 如果您要在其他東西的上面渲染很多Sprites的話,您會遇到很多隨機的排序次序問題,以及使用不同Texture的問題,而且背景Sprite有時會掩蓋它前面的所有東西。就像您在這個XNA Pong遊戲中看到的,這裡使用了單獨的SpriteBatch調用過程來渲染背景,這樣它就被獨立出來,不會干擾菜單和遊戲中的Sprite的渲染。
  • 要一次性渲染所有的Sprite,尤其是當您可以使用混合模式對它們進行排序的時候。調用一次SpriteBatch一次性渲染所有的Sprite會使速度快很多,關於這一點您可以看看Pong遊戲中的DrawSprites方法。如果您使用不同的混合模式,比如光效處理使用加成運算(Additive),而其他的Sprite使用Alpha混合,此時您要分兩個過程來渲染,先渲染Alpha混合元素,然後在最上面添加加成運算的光特效,這樣做您的遊戲效能會提升200%-300%。
  • 要考慮解析度問題以及如何處理不同的寬度和高度,您可以在Initialize方法中擷取當前使用的解析度,代碼如下:width = graphics.GraphicsDevice.Viewport.Width;
    height = graphics.GraphicsDevice.Viewport.Height;
  • 不能強制使用某個特定的解析度,因為在Xbox 360上它可能不能正常工作,在Windows平台上它也只能是一個預設的解析度。比如,您想在個人電腦上測試720p 16:9(1024×768)解析度,您必須要有一台支援這個解析度的顯示器,可以是視窗模式(windowed mode)或者全螢幕模式(fullscreen mode)。在遊戲主類(在本章中就是PongGame類)的構造器中添加下面的代碼把解析度預設為720p,並在Initialize方法中使用上面的方式來擷取寬度和高度以檢查它是否正確。graphics.PreferredBackBufferWidth = 1280;
    graphics.PreferredBackBufferHeight = 720;
  • 在XNA中不支援字型處理,要顯示文本,您可以像本章中使用已經包含文本的紋理圖片,或者像第五章一樣寫自己的字型處理系統。對於這兩種方案您都要使用Sprite來渲染文本或者每次渲染一個字母。 
  • 在XNA中Sprite並不是唯一的方式來展現2D資料,您可以寫自己的Shaders,甚至可以做比Sprite類本身提供的更多的進階特效。作為一個例子,可以看看第五章中如何使用Shaders來渲染2D線條。

2.7本章摘要

     我希望您能喜歡本章中的內容,並掌握建立遊戲的整個過程。Pong可能並不是最好玩的遊戲,但它涵蓋了對於任何一個遊戲項目來說都可能包含的從頭至尾的所有東西。對於大一些的遊戲項目,只用一章的篇幅是講不完的,但在這裡您至少已經學習了一些概念、單元測試以及一些敏捷方法學的基本術語。下一章要學習輔助類的設計,然後再深入研究Game類和遊戲組件,這之後,您就可以準備寫一個包含很多非常酷的特效的3D引擎,它將在本書最後一部分使用XNA寫一個大的、好玩的遊戲時用到。同時,您還將學習一些其他的小的、但好玩的遊戲項目。

     本章最重要的一點是敏捷開發給遊戲編程帶來的好處。即使您可以即時地對遊戲做一些修改,有一個非常容易的、嚴謹的方式來解決問題,但先做一個遊戲構思——哪怕只有一頁紙那麼多,仍然很重要。另外,單元測試也很有協助,不過在下一章中您將看到單元測試還可以自動化地完成,並且對於本書中其他項目都要使用的一些輔助類來說單元測試也很有用。

     看一看在本章中您學到的內容:

  • 寫下您的想法並有一個小的遊戲構思非常重要
  • 讓您的遊戲構思保持在一頁紙的篇幅內會很有協助
  • 使用嚴謹的步驟來解決問題,並從問題最高層面的角度來使用單元測試,而不用去考慮具體的實現細節。通過這種方式您能夠快速地提取出遊戲構思的關鍵區段,並寫一個單元測試,這時候就會很容易地發現您具體要實現什麼樣的方法了
  • 建立紋理素材,把它們載入到項目中,然後把它們作為Sprite渲染出來
  • 一次性渲染所有Sprite可以提升遊戲效能
  • 使用一個合適的計算公式可以協助您建立解析度獨立(resolution-independent)的遊戲,這樣遊戲就可以在任何解析度下很好地運行於Xbox 360上
  • 學會使用XACT添加音效,第9章有更加詳細的講解
  • 處理遊戲輸入以支援兩個Gamepad控制器和多個玩家的鍵盤操作
  • 使用BoundingBox結構進行2D碰撞檢測
  • 如果始終把z值設為0,您可以使用Vector3來代替Vector2
  • 使用單元測試來進行碰撞檢測非常重要,並可以大大減少您的測試工作量。即使您當前正在處理與碰撞完全不同的部分,仍然可以切換到碰撞檢測的單元測試中再次進行檢測

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.