脚本编辑器马上完成

0

这两天花了点时间,终于马上就要将编辑器搞完了。
第一天设计了下界面及相关逻辑,并整成文档。
每次在写设计文档的时候,总是按耐不住心中那股急切的火焰,不待文档设计好,就迫不及待的去敲代码了,结果就是“我靠,毁了”。之前写战斗系统时就是很近的例子了,导致战斗系统三遍,我擦,当然还有其他原因,但文档没设计好会很浪费时间。
其实设计的不是案子,有些系统案子写完了,系统做完了,案子也就没什么用了。主要是在写案子的过程中整理思路,起码将明显的设计难点与陷阱都理清楚了。
这次写文档的时候差点又犯了这毛病了,不过还好,哈哈。

到目前这个编辑器还没遇到什么难点,有一个关于字符串的解析替换之类的感觉超级麻烦,所以用另一种方法显示了,就是一个函数在选择完参数后,将这整个函数都显示出来的地方。下面放个截图的时候说下。

FOY(VO~LA9[X2C``(P}U(BC

添加动作的窗口。本来计划是当选择完所有函数的参数后,会在“动作文本”中显示具体的参数,但实际对于字符串的查找替换等等有些比较繁琐的逻辑,突然感觉自己是在折磨自己,所以索性就用简单的一个ListBox来显示参数的填充内容了,如上图所示。

每个参数都有参数类型,比如int,float,Char,CharType,bool,Text等等,当点击参数的链接时会获取这个类型,然后根据类型来打开不同的窗口,比如上图中一共有两种类型:Char,Int,分别用这两个窗口显示的:

image

参数还可以是函数,但这个函数的返回值必须是这个参数规定的类型,比如:

@GI6XLU101(X7EQS%MF2DAJ
这个GetPlayerChar的函数是个具有Char类型返回值的函数。

关于脚本的配置,首先是模板的配置,也即在编辑器中供选择的配置。主要包括两种类型,一种是动作,也即具体的脚本,比如图中的“(角色)移动到(x,y)”;另一种就是具有返回值的,比如GetPlayerChar.
两种类型在不同的地方显示使用。
这个具体的数据结构不说了,真麻烦。

马上完成,但还没有完成。还有个脚本序列的窗口,这个窗口将会有一个列表显示当前编辑的所有的脚本。
然后这个序列就可以保存为脚本文件,在游戏中调用了。
至此脚本编辑器才算基本完成,剩下的就是脚本模板的添写了,这个会在以后的游戏开发中不断地增加;还有就是与角色编辑器等其他编辑器进行合作的部分,这个以后再说。

开始编写脚本编辑器

0

开始编写脚本编辑器了,意味着就确定使用当前这个脚本系统了。唉~~~真是好痛苦啊,从准备到决定做编辑器花了近2个月的时间。

本来是想就是用LUA的,但很多功能都是有时间性质的。比如脚本:
让角色A移动到(X,Y)
A说话“你好,世界”。

MoveChar(A,X,Y)
Say(A,"你好,世界")
本意是当角色移动到(X,Y)之后再说话,但实际直接用lua来实现的话就会很麻烦,因为MoveChar调用之后直接调用的Say,就等不到角色到达目的地就开口说话了。。
类似这样的问题还有需要等待X秒后在执行某个动作,当A说完之后B再说话等等。
可能是我经验不足能力不行啊,这种游戏中应该是很常见的逻辑到了我这却难倒我了。所以查看了不少脚本相关的资料。最后经过这一个多月的不断地编写各种辛苦但最后发现不能用的代码之后,还是回到了最初看到的脚本实现,是《DX做RPG》那本书中使用的脚本,发现只要稍改一下这套脚本的逻辑就能满足以上的还有其他的各种需求了。
改的地方,就是规定了部分脚本的执行动作完成后通知脚本系统,脚本系统接收到通知后才能执行小一条。。。哈哈,多简单的逻辑啊,多简单啊。。。多简单。。。
原本的教程里是将配置的脚本内容直接写到二进制文件里面了,我又修改为用lua配置,这样调试起来比较方便。
好了,今天开始计划编辑器的编写。打算参考《魔兽争霸三》的地图编辑器中的脚本编辑器。
EX}`5ONYMK4N%)CZEB2SMBG
直接用鼠标点来点去的应该是最方便的。
今天下午主要试着实验一下其中的链接。也即图中蓝色的部分。当点击后会打开相关的界面,而这个的实现我是直接从codeProject下载的(在这里),当然想直接就拿来用,但实际还是要做些修改的,首先就是对于中文的链接会出现乱码,主要是因为其中有直接对字符的操作。因为中文是2个字符的,所以要修改下。
同时为了实现点击不同的链接可以响应不同的处理,所以也对其中的数据结构也作了修改,添加了几个字段用来区分不同的链接。
整体上这个功能应该是可以实现了,接下来就是要好好规划下各种界面各种脚本的显示什么的了。

%5M7S`IY47U59Z7GSG]))Q4