博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XNA 游戏 运行时编辑器
阅读量:6993 次
发布时间:2019-06-27

本文共 2324 字,大约阅读时间需要 7 分钟。

  最近在写游戏时发现随着代码量和资源数量的加大,编译速度越来越来慢...而且游戏编程中需要 多次调整的数据有比较多(比如各种移动速度,攻击硬直之类,不可能一次指定正确..),而每次改一个 数据就要重新编译一次...实在受不了,所以写了这样一个编辑器,用于游戏前期测试,可以在游戏运行时修改数据,编辑器的界面会随着你设定要修改的数据而自动变化。

截图:

 

下面是下载地址,项目中包括编辑器窗体程序,和一个测试用的简单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(...) 的参数 :

///  /// 运行时修改值 ///  /// 要修改的值 /// 要修改的值的名字 /// 最大值 /// 最小值 /// 增量值 zero是1 one是0.1 ...three是0.001         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

你可能感兴趣的文章
Visifire图表
查看>>
python常用模块之paramiko与ssh
查看>>
Alpha发布——视频博客
查看>>
加载框(loading)
查看>>
Oracle 增加 修改 删除 列
查看>>
AES算法在Python中的使用
查看>>
Angular 中使用惰性加载
查看>>
SpringMVC源码解析 - HandlerAdater - ModelAndViewContainer上下文容器
查看>>
Swift教程之属性
查看>>
动手动脑3
查看>>
HDU 3397 Sequence operation(线段树区间染色加区间合并)
查看>>
【随笔】写下现在所想的,开始写博客
查看>>
linux命令之vi文本编辑器
查看>>
WPF-WrapPanel
查看>>
大家好
查看>>
iOS 疑难杂症 — — UITableView 添加 tableFooterView 旋转屏幕后收不到点击事件!!!...
查看>>
asp.net 8 Request,Response,Server
查看>>
Windows API 技巧集
查看>>
github心得体会
查看>>
Binary Tree Level Order Traversal [LEETCODE]
查看>>