Windows Phone 7 編程實踐–XNA變身記

來源:互聯網
上載者:User
 我們以MSDN上Using a Basic Effect with Texturing介紹的 XNA Game 4.0 TexturedQuad_Sample為例,說明如何將Windows上啟動並執行XNA程式快速部署到Windows Phone 7手機和Xbox 360上測試並運行。
  作品目標:Windows Phone 7 開發的實用手冊
  Windows Phone 7 編程實踐 參考資料: Programming Windows Phone 7
MSDN Library -- Windows Phone Development
UI Design and Interaction Guide for Windows Phone 7 v2.0
Designing Web Sites for Phone Browsers
Develop for Windows Phone & XBOX 360 Code Sample Windows Phone 7 Application Certification Requirements
 在本書的整理過程中,力求從深度和不同的側面詮釋Windows Phone的開發技術。由於個人能力和水平有待提高,很多問題的分析還很膚淺。敬請各位不吝賜教,提出改進建議。   目錄
前言     TexturedQuad程式說明
MSDN上的英文說明 
Windows上運行結果
變身Windows Phone 7程式產生新的Windows Phone 7工程
在Windows Phone 7的模擬器中運行結果代碼究竟發生變化了嗎?Game1.csProgram.cs揭秘   前言
 XNA是Windows Phone 7在應用和遊戲方面的主要開發方式,XNA起源於遊戲界大名鼎鼎的DirectX,是微軟對於C#版DirectX的修正和擴充版本。
如果您以前就做過XNA在Windows和Xbox 360,那麼您很幸運,因為您以前做的XNA的程式將很容易部署到Windows Phone 7的手機上,幾乎不用改代碼。這是多麼不可思議的事,曾有人說明,沒有一個程式可以運行在所有的作業系統上。
我們以MSDN上Using a Basic Effect with Texturing介紹的 XNA Game 4.0 TexturedQuad_Sample為例,說明如何將Windows上啟動並執行XNA程式快速部署到Windows Phone 7手機和Xbox 360上測試並運行。
特別感謝微軟技術專家Bruce.Wang在TechED雲端運算中國巡演青島站的精彩講解,讓我知道了XNA的特性。可以寫下這篇文章。 TexturedQuad程式說明
MSDN上的英文說明
 Using a Basic Effect with Texturing
http://msdn.microsoft.com/en-us/library/bb464051.aspxDemonstrates how to create and draw a simple quad—two triangles that form a rectangle or square—using DrawUserIndexedPrimitives.
This sample introduces the Quad class, which is used to construct a quad with a list of vertices and indices suitable for drawing with DrawUserIndexedPrimitives. The sample also demonstrates how to use BasicEffect to render the quad and to apply a texture to the primitive. For more information about BasicEffect, see Creating a Basic Effect.

The code in the topic shows you the technique for creating and drawing a quad. You can download a complete code sample for this topic, including full source code and any additional supporting files required by the sample.
Download TexturedQuad_Sample.zip.
 Windows上運行結果
 這裡姑且不談程式本身實現的功能,下面我們就不手工修改一句代碼的情況下,將這個程式移植到Windows Phone 7和Xbox 360上。前提條件是,您的系統中已經為VS2010安裝了Windows Phone 7開發所有的環境和開發包,這裡就不再累述安裝過程。 變身Windows Phone 7程式
產生新的Windows Phone 7工程
 在[Solution Explorer]中,選中" TexturedQuadWindows"工程,點擊右鍵,如選擇[Create Copy of Project for Windows Phone],VS2010會自動為我們建立一個Windows Phone上啟動並執行工程。如。  名稱為[Windows Phone Copy of TexturedQuadWindows]就是系統為我們產生的,可運行在Windows Phone的工程。下面我們就修改工程的名稱為TexturedQuadWindowsPhone,並將其設定為預設啟動程式。 在Windows Phone 7的模擬器中運行結果
 重新編譯器,在Windows Phone 7的模擬器中Debug運行,結果如下: 代碼究竟發生變化了嗎?
 代碼發生變化了嗎?回答是否定的。仔細瞧瞧Game1.cs和Program.cs檔案有什麼玄機。Game1.cs
 看看Game1.cs中發現在Update方法中有"#if WINDOWS"的字樣,原來在windows下程式會處理Keyboard。
///
<summary>

/// Allows the game to run logic such as updating the world,

/// checking for collisions, gathering input, and playing audio.

///
</summary>

///
<param name="gameTime">Provides a snapshot of timing values.</param>

protected
override
void Update(GameTime gameTime)
{

// Allows the game to exit

if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)

this.Exit();
 #if WINDOWS

if (Keyboard.GetState().IsKeyDown(Keys.Escape))

this.Exit();
#endif
 
// TODO: Add your update logic here
 
base.Update(gameTime);
}
Program.cs
 在Program.cs檔案中我們發現有"#if WINDOWS || XBOX"字樣。
namespace TexturedQuadWindows
{
#if WINDOWS || XBOX

static
class
Program
{

///
<summary>

/// The main entry point for the application.

///
</summary>

static
void Main(string[] args)
{

using (Game1 game = new
Game1())
{
game.Run();
}
}
}
#endif
}
 揭秘
 其實在TexturedQuadWindows工程和TexturedQuadWindowsPhone中使用的Game1.cs和Program.cs,以及其他程式運行所需的檔案都是一致的,但是為什麼我們在移植過程中沒有遇到任何阻礙呢。原程式在編寫時已經考慮到移植的問題了,就是Game1.cs中的#if WINDOWS

if (Keyboard.GetState().IsKeyDown(Keys.Escape))

this.Exit();
#endif
以及Program.cs中的#if WINDOWS || XBOX

static
class
Program
{

///
<summary>

/// The main entry point for the application.

///
</summary>

static
void Main(string[] args)
{

using (Game1 game = new
Game1())
{
game.Run();
}
}
}
#endif
 原程式已經根據Windows、Windows Phone和Xbox 360不同的硬體特點做了區分。因此我們在移植過程中藉著東風,一蹴而就。總結,我們寫XNA程式時也應注意這方面的特點,編寫好"#if WINDOWS"和"#if WINDOWS || XBOX",方便移植程式,從容變身。將原程式變身為Xbox 360上啟動並執行程式方法相同,請身臨其境去嘗試。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.