XNA 4.0目前是CTP版本,必須使用C# 2010,你可以到XNA的官方網站上面去做下載安裝。
安裝完畢以後即可以開始進行專案開發,開啟Visual studio C# 2010後,按下左上角的file
可以根據需求,選擇你所需要的平台裝置,你可以體驗一下新的平台裝置Window phone 7的系統平台,或是傳統的PC和xbox 360平台。
新建專案完畢以後,在右邊的專案管理員那邊,可以看到檔案架構跟之前的版本好像不太一樣。
沒錯!! 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過後的作業系統才行。
留言列表