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的話需要自己轉換下。
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 游戏 运行时编辑器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redmi将在印度推出首款智能电视 便宜
- 下一篇: Tornado使用mako 模板总结