如何实现一个游戏地图编辑器

16 篇文章 1 订阅

参与的一个项目,策划使用类似csv的格式进行配置数据填写。csv数据格式相比于excel格式虽然有可以merge,读写简单的优点,但也有不少缺点(不支持公式存储,不支持注释,添加图片等等)。于是,我们觉得需要一个地图编辑器,来协助策划完成数据的填写工作,以提高数据填写的效率和正确率。

读书时,接触过一些网游私服的编辑器,但印象最深的还是war3地图编辑器。所以,我的直觉就是是不是可以实现一个类似的上图的编辑器,感觉已经完全够用了。

我们的目标主要有2个。帮助策划更方便的编辑和查找数据;为不同的数据做定制化的组件支持(有的是combobox,有的用checkbox等等),减少数据出错的可能性。

数据格式

首先,我们希望我们地图编辑器支持的数据格式是一种扩展的csv格式,因为我们除了数据本身外,还需要一些头文件信息。我们需要至少知道各个字段的名字,字段的类型(便于做数据检查)等等。

于是,我们确定了这样的数据格式。比较简单,head是表头信息,data即是csv格式的数据。

数据的加载

确定了数据格式,我们就可以把数据头和数据本身,分别加载到一个内存对象中。数据本身,建议就使用字典来存储(一般的实体表都是有唯一id的),唯一id用来做主键,List<string>类型的数据作为值。数据字典中的值,不论具体的字段类型,都使用string存储,会比较简单。并且对编辑器而言,所有的数据都是字符串,只是不同的字段类型,在改变数据时需要有一些约束。

将数据加载到内存的对象(DataPack)中,DataPack除了具有数据加载的接口外,还可以有数据查找,修改,导出等等方法。

基本布局

再回头看上图的内容,我们发现左图(导航栏)的数据都来自于DataPack中的数据信息(每一条记录的Name构成的列表或Tree)。右图(编辑栏)则是DataPack的表头信息,以及某一条记录的所有数据。

导航栏,我们可以很容易的使用ListView控件来填充完成,通过处理其选中目标变化的事件就可以刷新编辑栏中的数据。

对于编辑栏,通过循环所有表头信息,我们可以为每一个字段生成一组组件(包括2个Label和一个TextBox,如上图)。生成时的主要问题就是控制各个控件的位置。此时TextBox应该是空的。而当导航栏的选取目标发生变化时,面板加载对应的数据,并填充对应的TextBox。

组件的定制

通过定制,我们可以对上图的控件进行改进。

我们通过一种ini文件的格式来定制的规则,主要是告诉系统,哪一个字段该对应使用哪一种控件,以及一些配置值。

当生成表组件排布时,系统发现对应的ini文件中有特殊组件规则,便会使用特定的组件来取代TextBox。

不管是默认的Textbox控件还是各种自定义的组件,都是实现了上图的IAutoControl接口。通过这种约束,面板的数据赋值/取值等过程不需要区分是哪一种控件的,只需要面向接口进行编程。比如,默认的TextBox控件只是将Value属性映射到TextBox组件的Text字段是。而复杂组件的行为可能就会复杂的多。

总结

整个编辑器程序,我们需要处理两种数据,数据和元数据(表头),然后通过一个编辑器的显示类(View)来完成数据的加载、显示和编辑修改。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作品名称 游戏地图编辑器 作者 汉克斯 运行环境 只在Win XP Service Pack2的环境下测试 联系方式 QQ: 349330748 源代码使用的编译器 VS2005 代码说明 此编辑器是用自行写的库制作的,库可实现45度和0度2D的绘制,里面包含简单的效果模块,还有比较失败的控件模块, 都是可以自行扩展的. 由于这是个demo,并没有把使用的资源放在特定的文档里面,而是集成在程序内部成了硬编码,的确不太方便.这里,感 谢不夜人的图片资源,给我省掉了很多的事情. 另外说明,代码的编写基本上是一个人完成的,完全使用其他人代码的地方,我都在SDK中进行了说明,如果想获取此程 序的SDK,请联系我.或者你可以自行制作出SDK,使用doxygen根据代码可自动生成SDK. 程序说明 编辑器可在16位和32位颜色模式下运行(24位不行!)。 可对地面建筑和精灵进行添加、删除、移动、修改等操作。 对地图进行的添加、删除、移动等操作会被存入缓存,以供Redo、Undo。 可显示地图网格和地面是否能通过的情况。 对精灵可以以加速、减速、暂停等速度方式运行。 其他使用说明请使用程序内部的"说明"按钮 后记 这个程序是对C++和Ddraw库学习的一个总结,由于windows的编程设计还刚开始学,所以其中的有些部分可能是费力不 讨好的(控件部分),有些部分是没有深入使用的(多线程部分),不过目前是基本满意了.希望大家也帮忙测试一下,有 bug的话通知我一声,我对于在其他的电脑上运行是怎样的还没有个底,先谢过了.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值