日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

XNA 游戏 运行时编辑器

發布時間:2024/9/20 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XNA 游戏 运行时编辑器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  最近在寫游戲時發現隨著代碼量和資源數量的加大,編譯速度越來越來慢...而且游戲編程中需要 多次調整的數據有比較多(比如各種移動速度,攻擊硬直之類,不可能一次指定正確..),而每次改一個 數據就要重新編譯一次...實在受不了,所以寫了這樣一個編輯器,用于游戲前期測試,可以在游戲運行時修改數據,編輯器的界面會隨著你設定要修改的數據而自動變化。

截圖:

?

下面是下載地址,項目中包括編輯器窗體程序,和一個測試用的簡單3D游戲模板。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??


  http://115.com/file/besevsh2#

  XNAEditor_3D...eFormwork.rar

現在來解說下編輯器的使用方式: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

1. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

在游戲程序中添加 XNAEditorForm.dll 的引用。

2. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

在游戲代碼中,需要修改的數據所在的那個類加入如下代碼:

2.1

//編輯器對象
XNAEditor xnaEditor;

2.2

//放置在Update中
if (pControl.F1.IsClick == true)
{
if (xnaEditor == null || xnaEditor.IsDisposed == true)
{
//初始化編輯器對象
xnaEditor = new XNAEditor();
//彈出編輯器窗體
xnaEditor.Show();
//設置要修改的數據
xnaEditor.SetDate(speed, "speed", 16, 0, TestDateControl.Incremental.one);
xnaEditor.SetDate(iA, "iA", 6, -6, TestDateControl.Incremental.zero);
xnaEditor.SetDate(iF1, "iF1", 116, -67, TestDateControl.Incremental.three);
xnaEditor.SetDate(iF, "iF", 116, -67, TestDateControl.Incremental.two);
}
}

?

SetDate(...) 的參數 :

/// <summary>
/// 運行時修改值
/// </summary>
/// <param name="ob">要修改的值</param>
/// <param name="strn">要修改的值的名字</param>
/// <param name="max">最大值</param>
/// <param name="min">最小值</param>
/// <param name="incremental">增量值 zero是1 one是0.1 ...three是0.001</param>
public void SetDate(object ob, string strn, float max, float min, TestDateControl.Incremental incremental)

?

2.3
數據讀取。
游戲編輯器返回的都是float型數據,要int的話需要自己轉換下。

//數據讀取,同樣要 放置在Update中
if (xnaEditor != null && xnaEditor.IsDisposed != true)
{
//讀取編輯器上修改后的數據
speed = xnaEditor.GetDateByName(speed, "speed");
iA = (int)xnaEditor.GetDateByName((float)iA, "iA");
iF1 = xnaEditor.GetDateByName(iF1, "iF1");
iF = xnaEditor.GetDateByName(iF, "iF");
//編輯器是否獲得焦點(解決鼠標會在兩個窗體同時又效果的問題...)
IsEditorGetFocus = xnaEditor.IsGetFocus;
}

?

3. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

簡單3D游戲模板,編輯器修改的第一個數據(speed)就是 這個模板程序中在原點的那個模型的移動速度,按Q/E 左/右移動,程序中的攝像機操作如下:

  攝像機 -- 操作方法:
  1.使用鼠標按下左鍵+滑動,改變攝像機朝向
  2.使用鼠標滾輪,拉近/退遠鏡頭(按住右鍵可以加速),鼠標中鍵 是視角回原
  3.使用鍵盤 上下左右/WSAD,在xz平面上平移攝像機

?

這樣就能使用了 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

  編輯器會隨著SetDate()設置的數據數量而自動增加控件組(如圖,就是一個Label, 一個textBox,一個TrackBar)的數量,而TrackBar的長度會隨著設置的增量值(incremental)而改變長度.

  這樣就可以在運行時修改數據了,一定程度上減少了編譯的次數,但是明顯不夠...調整游戲邏輯的時也要消耗大量的編譯時間,這個編輯器的下一個版本要加的功能就是在運行時修改游戲邏輯。不過這個好難...我一點頭緒沒有..求各位高人指點..

轉載于:https://www.cnblogs.com/dshGame/archive/2012/03/07/2383285.html

總結

以上是生活随笔為你收集整理的XNA 游戏 运行时编辑器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。