繪製2D紋理(Texture)

摘要:繪製2D紋理(Texture)

本文章支援格式為XNA 1.0 版本,1.0以上的版本請事情況自行調整

首先在進入XNA時,從基本的先來體驗,將一張2D的圖片用XNA的處理來呈現在程式裡面吧。

首先,先開啟C# EXPRESS 2005,在【File】->【New Project】,選擇Windows Game這個專案。

除了建構子以外,會先看到幾個精靈所建置的Function
1. Initialize : 初始化函式,在這個函式初始化,在遊戲執行時期的物件內容。
2. LoadGraphicsContent : 讀取圖片內文,用來載入想要開啟的圖片或是即將繪製在Graphics Device上面的元件。
3. UnloadGraphicsContent : 卸載已經被載入的元件,檔案等等。
4. Update : 用來即時更新所有現在繪製的圖形,可能像是被旋轉的之類等等,更新過後再重新繪製。
5. Draw : 繪製。將所要顯現的結果繪製出來。

在新開專案後,可以按下F5,先看看建置結果,出來應該是一個天空藍的視窗。

看看精靈除了建置函數以外還有做哪些事情。
在主程式裡面,一開始就會看到兩個事先宣告的物件。

GraphicsDeviceManager graphics;
ContentManager content;

GraphicsDeviceManager : 處理圖型設備的設定和管理。
ContentManager : 是執行期間的元件,用管線處理的方式載入管理Binary檔案。

接下來開始準備開始在程式中繪製一個2D紋理。

首先我們要加入兩個新的物件,Texture2D和SpriteBatch。
Texture2D myTexture;
SpriteBatch spriteBatch;
Texture2D用途式呈現一個2D的方格圖片。
SpriteBatch能夠繪製一組圖片使用相同的設定。

再來要將圖片加入置專案,在Solution Explorer中,對著專案按下右鍵選擇Exits Item(一般會建立一個content的資料夾),尋找要加入的圖片。

加入完成後,接下來再LoadGraphicsContent函數中,加入依些載入資訊。

myTexture = content.Load<Texture2D>("GameThumbnail");
spriteBatch = new SpriteBatch(graphics.GraphicsDevice);

用ContentManger來載入所以開啟的圖檔,使用ContentManger的Load函式來載入。
因為ContentManger用來開啟和管理執行中的文件,可能你目前載入的文件是文字格式,或是圖檔等等。
而Load函式是一個樣板函式<T>用來將回傳值轉型,以上述例子所說,現在希望將回傳值轉成Texture的格式,所以在Load的函數中<T>填上<Texture2D>。
而函數所要填上的變數,就是要開啟的檔名字串。

SpriteBatch這個物件比較建議在Initialize這個函數中進行初始化,當然也可以在準備載入圖片的時候載入。
建構這個這個物件的時候需要傳入一個GraphicsDevice的物件,所以我們必須用GrapicsDeviceManger來取得關於GraphicsDevice資訊。

現在背景資料都已經載入完畢,像是開啟圖片至Content Pipeline等等。

再來把裡面的東西呈現出來,用Draw函式來繪製。

跟DirectX一樣,在繪製的時候,須要先清除緩衝區,而在XNA也類似這種工作。

用GraphicsDeviceManger的GraphicsDevics中的Clear函數,將背景清除,函數的傳值就是Color類別,可以指定要將背景清除的顏色。
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

清除完背景過後,就是要開始繪製,在這邊可以直接用SpriteBatch.Begin不使用參數直接告訴設備我準備要繪製,或是設定blend選項。
spriteBatch.Begin(SpriteBlendMode.AlphaBlend);

告訴設備要開始繪製後,接下來就是真正的輸出,使用SpriteBatch中的Draw來繪製。
spriteBatch.Draw(myTexture, Object, Color.White);
函數參數(繪製的紋理,圖形要放置的位置,顏色填充)。
圖形位置,是一個二維的向量座標或是一個矩形區域。
顏色填充的部分,目前不清楚出來的效果。

告訴設備已經繪製完成。
spriteBatch.End();

注意 : 第一次直接寫的時候可能會發生,無法找到載入的圖片資料,這個時候在Solution explorer點選要載入的圖片,在Properties中的XNA FrameWork Content中要選擇"True",否則執行期間將會發生錯誤。

範例連結 :
下載