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

截图:

下面是下载地址,项目中包括编辑器窗体程序,和一个测试用的简单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 游戏 运行时编辑器相关推荐

  1. U3D游戏运行时资源是如何从AB中加载出来的

    U3D游戏运行时资源是如何从AB中加载出来的 以安卓为例 1,游戏启动,自定义版本管理器去安卓的持久化目录下查找我们自定久的版本管理文件 rep.db,若该文件不存在,说明这是游戏第一次启动,于是就把 ...

  2. UE4 在游戏运行时更改变量 (通过鼠标滑轮来更改第一人称角色的最大行走速度)

    在上一篇博客中(UE4 更改组件变量 (以修改第一人称角色模板的最大行走速度和跳跃高度为例))已经创建了最大行走速度这个变量,如何在游戏运行时修改它从而达到动态调整速度的效果? 效果: 步骤: 1.创 ...

  3. Java初学者作业——实现控制台的猜数字游戏。游戏运行时产生一个1~100之间的随机数字

    返回本章节 返回作业目录 需求说明: (1)实现控制台的猜数字游戏.游戏运行时产生一个1-100之间的随机数字 (2)要求用户从控制台输入数字,若输入的数字比随机数小,则输出"太小了,再大一 ...

  4. 笔记本玩逆水寒服务器未响应,逆水寒游戏运行时电脑崩溃怎么办_逆水寒运行游戏是笔记本崩溃问题解决办法介绍_游戏吧...

    近日有玩家表示在逆水寒运行时,部分笔记本会出现崩溃的现象.那么逆水寒游戏运行时电脑崩溃是怎么造成的,又该怎么解决呢?下面游戏吧小编就为大家带来运行游戏时电脑崩溃问题的解决建议. 运行游戏时电脑崩溃问题 ...

  5. 魔兽争霸等老游戏运行时无法全屏(有黑边)的解决方法

    使用windows7玩魔兽等老游戏由于兼容性问题会出现游戏画面两边黑边,不能占满整个屏幕的问题,此时在游戏内调整分辨率是没有用的,需要对注册表的相关项进行修改 问题: windows7运行老游戏时出现 ...

  6. 玩游戏的时候计算机弹出,游戏运行时出现延迟怎么办?一个设置即可解决

    一直听到有小伙伴吐槽说,使用电脑玩游戏时经常出现网络延迟现象,导致游戏卡顿,试了很多方法都没有成功解决问题,真的是很困扰.无妨,其实你只需要修改注册表中的一项服务,即可缓解网络延迟,方法如下. 电脑玩 ...

  7. 手机游戏运行时分析工具

    原创地址:http://blog.sina.com.cn/s/blog_73bed4520102w4tt.html step.1 准备工具 1.adb连接工具(我用的cofface adb  ) [c ...

  8. Unity3d 帧率设置 及在游戏运行时显示帧率

    版权声明:本文转自http://blog.csdn.net/huutu 转载请带上 http://www.liveslives.com/ http://blog.csdn.net/cp79062165 ...

  9. Unity3d帧率设置及在游戏运行时显示帧率

    在Unity3d 中可以通过代码设置 来限定游戏帧率. Application.targetFrameRate=-1; 设置为 -1 表示不限定帧率,一般情况在手机游戏中我们限定帧率为30 就OK了. ...

最新文章

  1. 好程序员web前端分享HTML基础篇
  2. 自定义Android时钟(支持秒针)
  3. BZOJ4238 : 电压
  4. 机器学习的宝典-华校专老师的笔记
  5. C语言在数组中找到最大的元素(附完整源码)
  6. Spring和SpringMVC的区别
  7. Python多线程及其使用方法
  8. mysql中文版下载_mysql数据库下载
  9. window2008 、 oracle11.2g 无法imp,dmp。
  10. Java后端面试八股文
  11. 记录点滴——2019年终总结
  12. 真实遇到的产品经理面试题
  13. java应聘面试自我介绍范文
  14. Apache 配置ssl证书
  15. 解决swift实现的websocket与后台通信问题:websocket is disconnected: masked and rev data is not currently supported
  16. C语言星号塔作业,c语言星号打印矩形、三角形、菱形等图案及参考答案
  17. sina.cn邮箱邀请
  18. 产品经理和项目经理区别与联系
  19. 财务内部收益率用计算机怎么算,财务内部收益率的计算
  20. 北达软微服务架构设计与实践圆满结束

热门文章

  1. VTK:Utilities之OffScreenRendering
  2. VTK:网格之FitToHeightMap
  3. Qt Creator粘贴和获取代码段
  4. OpenGL cubemap 立方体贴图实例
  5. php 如何缓存数据字典,使用PHP脚本如何导出MySQL数据字典
  6. SpringBoot使用JdbcTemplate案例(学习笔记)
  7. IntelliJ IDEA使用(二):tomcat和jetty配置(转自:http://www.cnblogs.com/jenkinschan/p/6052948.html)
  8. MapTask并行度决定机制、FileInputFormat切片机制、map并行度的经验之谈、ReduceTask并行度的决定、MAPREDUCE程序运行演示(来自学笔记)
  9. 4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(
  10. const对象,NULL和nullptr,C++中创建对象数组