生活随笔
收集整理的這篇文章主要介紹了
XNA游戏:Hello XNA
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
下面創建一個簡單的Windows Phone 7的XNA 程序,只是一個Hello XNA的文本,從屏幕的左上角一直往右下角移動,通過該例子來開始Windows Phone 7 XNA的游戲編程。
新建一個項目后可以看到這樣的一個項目工程結構,如圖所示。
?
?
Content項目是表示游戲的資源文件,相關游戲的資源就需要在Content目錄下進行添加。
看一下Game1.cs這個主要的類
?
using?System; ?using?System.Collections.Generic; ?using?System.Linq; ?using?Microsoft.Xna.Framework; ?using?Microsoft.Xna.Framework.Audio; ?using?Microsoft.Xna.Framework.Content; ?using?Microsoft.Xna.Framework.GamerServices; ?using?Microsoft.Xna.Framework.Graphics; ?using?Microsoft.Xna.Framework.Input; ?using?Microsoft.Xna.Framework.Input.Touch; ?using?Microsoft.Xna.Framework.Media; ??namespace?HelloWorldXNA ?{ ?????///?<summary>?????///?游戲的主要主體類 ?????///?</summary>?????public?class?Game1?:?Microsoft.Xna.Framework.Game ?????{ ?????????GraphicsDeviceManager?graphics;//用于管理圖形設備 ?????????SpriteBatch?spriteBatch;//游戲的圖形設備來畫2D對象 ??????????SpriteFont?spriteFont1;//字體 ?????????Viewport?viewport;//窗體 ?????????Vector2?textSize;//字體大小?二維向量 ?????????Vector2?textPosition;//字體位置 ??????????public?Game1() ?????????{ ?????????????graphics?=?new?GraphicsDeviceManager(this); ?????????????Content.RootDirectory?=?"Content"; ??????????????//?Frame?rate?is?30?fps?by?default?for?Windows?Phone. ?????????????TargetElapsedTime?=?TimeSpan.FromTicks(333333); ??????????????//?Extend?battery?life?under?lock. ?????????????InactiveSleepTime?=?TimeSpan.FromSeconds(1); ?????????} ??????????///?<summary>?????????///?游戲運行前的一些初始化 ?????????///?</summary>?????????protected?override?void?Initialize() ?????????{ ?????????????//在這里添加游戲的一些初始化處理 ?????????????base.Initialize(); ?????????} ??????????///?<summary>?????????///?加載游戲資源,LoadContent只會執行一次 ?????????///?</summary>?????????protected?override?void?LoadContent() ?????????{ ?????????????//?Create?a?new?SpriteBatch,?which?can?be?used?to?draw?textures. ?????????????spriteBatch?=?new?SpriteBatch(GraphicsDevice); ??????????????//?TODO:?use?this.Content?to?load?your?game?content?here ?????????????viewport?=?this.GraphicsDevice.Viewport;//獲取游戲的窗體 ?????????????spriteFont1?=?this.Content.Load<SpriteFont>("SpriteFont1");//加載字體資源 ?????????????textSize?=?spriteFont1.MeasureString("Hello,XNA!");//返回字符創的高度和寬度 ?????????????textPosition?=?new?Vector2(0,?0); ?????????} ??????????///?<summary>?????????///?游戲退出,回收資源 ?????????///?</summary>?????????protected?override?void?UnloadContent() ?????????{ ?????????????//?TODO:?Unload?any?non?ContentManager?content?here ?????????} ??????????///?<summary>?????????///?繪制游戲前的更新處理 ?????????///?</summary>?????????///?<param?name="gameTime">游戲的當前時間對象</param>?????????protected?override?void?Update(GameTime?gameTime) ?????????{ ?????????????//?Allows?the?game?to?exit ?????????????if?(GamePad.GetState(PlayerIndex.One).Buttons.Back?==?ButtonState.Pressed) ?????????????????this.Exit(); ??????????????//?TODO:?Add?your?update?logic?here ?????????????if?(textPosition.X?<?viewport.Height) ?????????????{ ?????????????????textPosition.Y?+=?10?*?(float)gameTime.ElapsedGameTime.TotalSeconds; ?????????????????textPosition.X?+=?20?*?(float)gameTime.ElapsedGameTime.TotalSeconds; ?????????????} ?????????????else ?????????????{ ?????????????????textPosition.Y?-=?10000?*?(float)gameTime.ElapsedGameTime.TotalSeconds; ?????????????????textPosition.X?-=?20000?*?(float)gameTime.ElapsedGameTime.TotalSeconds; ?????????????} ??????????????base.Update(gameTime); ?????????} ??????????///?<summary>?????????///?繪制游戲 ?????????///?</summary>?????????///?<param?name="gameTime">游戲的當前時間對象</param>?????????protected?override?void?Draw(GameTime?gameTime) ?????????{ ?????????????GraphicsDevice.Clear(Color.CornflowerBlue); ??????????????//?TODO:?Add?your?drawing?code?here ?????????????spriteBatch.Begin(); ?????????????spriteBatch.DrawString(spriteFont1,?"Hello,XNA!",?textPosition,?Color.Red); ?????????????spriteBatch.End(); ??????????????base.Draw(gameTime); ?????????} ?????} ?}? 運行的效果如下:
?
?
對于新建一個XNA for WP7的工程,可以看到在它的工程文件中,有:Initialize(), LoadContent(), Update(),Draw()這幾個主要的函數,那由些也就可以看得出XNA開發游戲的一個基本架構了:
Loading:用來加載保證游戲可以正常運行的所有資源等,這個狀態在整個系統中只在游戲開始前運行,也就是說整個游戲的生命周期中只運行一次。
Update:這個狀態是由所設置的時間間隔來驅動的,在每個時間間隔里重新計算游戲中各角色的狀態,以及游戲分值和各種游戲邏輯。一般默認為每秒30次(幀),如果設置間隔過大,游戲可能無法啟動。
Draw:這個狀態也是由所設置的時間間隔來驅動的,用來繪制各種變化到顯示設置上。
對于XNA資源,在創建新的工程時,就一起創建了一個Content工程,所有的資源(圖片、聲音、視頻、字體、3D造形、紋理等)都要加載到這個工程中,并被這個工程編譯為.xnb格式的XNA二進制文件,這樣才可以加載到游戲中,并被調用。
?
XNA游戲的生命周期如圖所示:
?
?
1)GraphicsDeviceManager:在XNA類庫介紹中提到的該類型是非常重要的。它為開發者提供方法來管理目標設備的顯卡資源。簡單地說就是調用顯卡的一個接口,該對象的GraphicsDevice屬性代表當前目標設備的顯卡。
2)SpriteBatch:該對象主要的作用是繪制文字和2D圖像。在游戲開發過程中,它的作用是非常重要的,因為游戲需要大部分圖片、文字和聲音等素材資源。所有游戲中需要顯示的畫面都必須經過SpriteBatch對象中的Draw方法來繪制。
3)Initialize( ):該方法用來初始化游戲程序的變量和對象。它允許游戲在運行之前做一些初始化的工作。可以在此查詢任何需要的服務和載入與圖形無關的內容。例如,顯卡設備、游戲分數設置等。
4)LoadContent( ):當初始化完畢后,程序就進入LoadContent,該方法用來加載游戲的素材,包括游戲的模式、聲音、圖像等。這個方法在一個游戲中只會被調用一次,并且是加載所有素材的地方。
5)Update( ):該方法相當于Direct3D中的FrameMove,簡單地說就是在圖形上修改當前畫面。它主要用于游戲執行一些邏輯,如:刷新畫面、檢查碰撞、更新分數、檢測游戲進程、收集輸入數據以及播放音頻等。
6)Draw( ):該方法相當于Windows編程的Paint或者OnPaint,是系統自動繪圖的方法。
游戲程序執行完LoadContent后,開始進入一個游戲循環,無論用什么語言編寫游戲程序,都需要一個游戲循環,這也是游戲程序與應用程序的最大區別。在XNA游戲項目中,游戲循環主要由Update和Draw兩個方法組成。
?
?
轉載于:https://blog.51cto.com/linzheng/1078473
總結
以上是生活随笔為你收集整理的XNA游戏:Hello XNA的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。