XNA 4.0簡易介紹

XNA 4.0目前是CTP版本,必須使用C# 2010,你可以到XNA的官方網站上面去做下載安裝。

安裝完畢以後即可以開始進行專案開發,開啟Visual studio C# 2010後,按下左上角的file
image

 

點擊開啟選單後,選擇新增專案,可以看到以下畫面
image 

可以根據需求,選擇你所需要的平台裝置,你可以體驗一下新的平台裝置Window phone 7的系統平台,或是傳統的PC和xbox 360平台。

新建專案完畢以後,在右邊的專案管理員那邊,可以看到檔案架構跟之前的版本好像不太一樣。
image 

沒錯!! Content的資料夾,從原本的遊戲專案被額外的分開來(會這麼做主要是考量到Code跟Resource不應該放在同一個架構中)

對於FX檔案,也就是我們在寫的shader code,這邊做了小小的改變,現在預設的shader編譯器自動變成是2.0,原本3.1的版本是使用1.0的版本,借由這次改變,接下來就不用每次寫一次Code就要改一次。

XNA framework這次對於Shader的使用這次也簡化了不少,我們可以看下面兩段Code,都是使用shader,只是Code被簡化了:

1. XNA 3.1

   1:  phong_effect.Begin();
   2:  foreach (Model model in sceneModel)
   3:  {
   4:      foreach (ModelMesh mesh in model.Meshes)
   5:      {
   6:          foreach (ModelMeshPart meshPart in mesh.MeshParts)
   7:          {
   8:              phong_effect.Parameters["kd"].SetValue(meshPart.Effect.Parameters["DiffuseColor"].GetValueVector3());
   9:              phong_effect.Parameters["ks"].SetValue(meshPart.Effect.Parameters["SpecularColor"].GetValueVector3());
  10:              phong_effect.Parameters["ns"].SetValue(meshPart.Effect.Parameters["SpecularPower"].GetValueSingle());
  11:   
  12:              GraphicsDevice.VertexDeclaration = meshPart.VertexDeclaration;
  13:              GraphicsDevice.Vertices[0].SetSource(mesh.VertexBuffer, meshPart.StreamOffset, meshPart.VertexStride);
  14:              GraphicsDevice.Indices = mesh.IndexBuffer;
  15:   
  16:              phong_effect.Techniques[0].Passes[0].Begin();
  17:              GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, meshPart.BaseVertex, 0, meshPart.NumVertices, meshPart.StartIndex, meshPart.PrimitiveCount);
  18:              phong_effect.Techniques[0].Passes[0].End();
  19:          }
  20:          mesh.Draw();
  21:      }
  22:  }
  23:  phong_effect.End();

2. XNA 4.0

   1:  foreach (Model model in scene_model)
   2:  {
   3:      foreach (ModelMesh mesh in model.Meshes)
   4:      {
   5:          foreach (ModelMeshPart meshPart in mesh.MeshParts)
   6:          {
   7:              phong_effect.Parameters["kd"].SetValue(meshPart.Effect.Parameters["DiffuseColor"].GetValueVector4());
   8:              phong_effect.Parameters["ks"].SetValue(meshPart.Effect.Parameters["SpecularColor"].GetValueVector3());
   9:              phong_effect.Parameters["ns"].SetValue(meshPart.Effect.Parameters["SpecularPower"].GetValueSingle());
  10:   
  11:              phong_effect.Techniques[0].Passes[0].Apply();
  12:              GraphicsDevice.Indices = meshPart.IndexBuffer;
  13:              GraphicsDevice.SetVertexBuffer(meshPart.VertexBuffer);
  14:              GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList,meshPart.VertexOffset, 0, meshPart.NumVertices, meshPart.StartIndex, meshPart.PrimitiveCount);
  15:           }
  16:           mesh.Draw();
  17:       }
  18:  }

比較上兩段程式碼,可以輕鬆的發現使用shader現在被簡化了,原本shader使用一定要有begin和end來做宣告,現在可以不用,直接指定pass並且apply即可。

content pipeline的部分,這次也有做些更改,對於model的content,之前kd的部分,原本是存成vector3,XNA 4.0改成為vector4,所以你想要取出kd的數值的時候,要用GetValueVector4,然後shader code的部分使用float4 來接收數值。

至於其他跟專案相關的地方並沒有太大的改變。

目前使用心得:
XNA 4.0必須使用C# 2010,2010這次我覺得最方便的就是在選字的地方,假設你要找一個變數叫做quadRenderer,只要你打Q他就自動幫你把非Q開頭的字自動過濾掉,接下來,在打u會在幫你過濾掉第二個字非u的,所以找變數就變得相當輕鬆。(我蠻喜歡的XD)

如果你是使用Wp7的開發環境,當你編譯以後,會開啟模擬器。
模擬器這個部分,如果你的顯卡不支援DX10,則在部屬過程將會發生Error。
這邊值得一提的就是,要開發WP7的遊戲必須使用Vista過後的作業系統才行。



posted on 2010/4/25 13:46 | 閱讀數 : 8077 我要推薦 | One Comment | 分類 [ XNA ] 訂閱

Comments on this post

# re: XNA 4.0簡易介紹

真希望從3.1升到4.0 他自己會幫我改程式碼

從2.0轉到3.1就出現一些問題了~

Left by huadi73 on 八月 21, 2010 6:35 上午
回覆

回應:

Please add 6 and 7 and type the answer here: