程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 想挑戰嗎?通過XNA Game Studio Express充分發揮您的想象力(5)

想挑戰嗎?通過XNA Game Studio Express充分發揮您的想象力(5)

編輯:關於C語言

呈現詳細信息

盡管我們可以方便地處理輸入和聲音,接下來的問題是:防護罩將是什麼樣的?我們需要將一些代碼 放入 Render 方法中。因此,使用 XNA Framework 中提供的一些數學和繪圖功能,在飛船的三維位置頂 部繪制一個精靈(透明的二維紋理)。

在解決方案資源管理器中,查找解決方案樹中的 Content 文件夾,打開它,然後打開它下面的 Textures 文件夾。您將看到各種 .tga 文件。我們將使用其中一個文件作為防護罩紋理。.tga 文件表示 二維圖形圖像,即精靈。

轉到 Ship.cs 中的第 433 行,並緊鄰其後建立一個新行 - 在“if (showThrust && evolved)”塊結尾後面。在該新行中,添加圖 2 所示的代碼。

Figure2呈現精靈

if (inShIEld && evolved)
{
   Texture2D shIEldtexture =
     SpacewarGame.ContentManager.Load<Texture2D>(
     SpacewarGame.Settings.MediaPath + @”textures\circle” );
   batch.Begin( SpriteBlendMode.AlphaBlend );
   // Move into screen space.
   Vector3 location = device.VIEwport.Project(
     position, SpacewarGame.Camera.Projection,
     SpacewarGame.Camera.VIEw, Matrix.Identity );
   batch.Draw(
     shIEldtexture,
     new Vector2( location.X - shIEldtexture.Width / 2.0f,
           location.Y - shIEldtexture.Height / 2.0f ),
     new Rectangle( 0, 0, shieldtexture.Width, shIEldtexture.Height ),
     new Color( new Vector4( 0.0f, 1.0f, 0.0f, 0.5f ) ), 0.0f,
     new Vector2( shIEldtexture.Width / 2.0f,
           shIEldtexture.Height / 2.0f ),
     (3.0f * (float)(Math.Abs( Math.Cos( exitShIEldTime ) ))) + 2.0f,
     SpriteEffects.None, 0.0f);
   batch.End();
}

讓我們看一看此代碼中發生的情況。首先,使用 XNA Framework 和 XNA Framework Content Pipeline,ContentManager 類從 Content\Textures 文件夾加載名為 circle 的紋理。ContentManager 類是一個 XNA Framework 類,用於在運行時從 Content Pipeline 加載內容。它是每個新 XNA Game Studio Express 項目中預填充的應用程序模型代碼的一部分。名稱“circle”與 Content\Textures 文 件夾中的 circle.tga 文件相關聯。XNA Framework Content Pipeline 將友好名稱分配給每個內容文件 ,這些文件用於在運行時加載內容。

接下來,將紋理加載到 XNA Framework 提供的 Texture2D 類中。使用 SpriteBatch(此代碼塊中的 命名批,表示將在屏幕上一次繪制的一批紋理)在屏幕上繪制 Texture2D 對象。

我們通過調用 batch.Begin 來指示精靈繪制即將開始,並說明我們希望使用 alpha 值混合處理。這 將使 circle 紋理的邊緣周圍是透明的,而整體上是部分透明的,因為我們希望仍然能夠看到防護罩下的 飛船。

在繪制之前,我們必須知道在屏幕上的什麼位置進行繪制。Spacewar Evolved 是一個三維游戲,因此 對象在三維空間內到處移動,而僅在繪制時才投影到二維平面上。我們必須在確定繪制防護罩的位置之前 確定三維飛船的二維位置。

XNA Framework 使我們可以從圖形設備獲取此信息。我們調用 device.VIEwport.Project,並傳入飛 船的三維坐標,以及視圖和投影矩陣。視圖矩陣定義了應用於每個三維對象的線性代數轉換,以便根據玩 家的視點正確放置該對象。投影矩陣將每個對象的三維坐標轉換為二維屏幕坐標,這樣就可以在屏幕上繪 制對象了。這些矩陣通常是預先計算並存儲的。在 Spacewar 中,它們保存在 Camera 類中,該類也定義 玩家的視點。使用這些值調用 device.VIEwport.Project 可以模擬將飛船的位置轉換為二維坐標,而不 必在那些坐標上進行實際繪制。此調用返回一個保存二維繪制坐標的向量,我們將使用它繪制防護罩。

下一步是調用 batch.Draw,傳入以下內容:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved