您的位置:首页 > Web前端 > HTML5

HTML5引擎Construct2技术剖析(三)

2015-07-23 11:30 501 查看
接上一节介绍游戏数据中的事件表单的格式说明。

EventSheet数据格式

游戏逻辑模型采用EventSheet数据格式来保存,EventSheet必须与Layout(对应一个显示界面)关联,当Layout运行时,会执行关联的EventSheet模型;

事件单的顶层数据结构很简单,是一个数组对象:

[0]: string,事件单名称

[1]: Array,事件单包含的单元列表

事件单的基本组成单元有3类: EventBlock(事件块),EventVariable(事件变量),EventInlcude(包含事件)。注意,当EventSheet执行时,EventInlcude事件会先被执行。

EventInclude数据格式

为了方便EventSheet模型的重用,一个EventSheet中可以包含其他EventSheet。

EventInlcude记录一个包含事件模型,是一个数组对象:

[0]: number,始终为2=包含事件单

[1]: string,包含的事件单名称

EventVariable数据格式

EventVariable记录一个事件变量,是一个数组对象:

[0]: number,始终为1=事件变量

[1]: string,变量名称

[2]: number,变量类型,0=number, 1=string

[3]: number/string,变量初始值(类型与变量类型一致)

[4]: bool,是否为局部变量,true=局部变量,false=全局变量

[5]: bool,是否为常量

[6]: number, sid(唯一标示)

[7]: bool,(尚未弄清楚)

EventBlock数据格式

EventBlock记录一个完整的事件模型,包含Conditions(触发条件)和Actions(执行动作)。触发条件用来筛选符合条件的对象实例,执行动作则是对符合条件的实例执行的操作。EventBlock是一个数组对象:

[0]: number,始终为0=事件块

[1]: Array,如果不为空,代表该EventBlock是一个事件组,事件组还可以包含事件组其中可以包含多个事件块,其长度为2:

—[0]: bool, 是否在启动时激活

—[1]: string,事件组名

[2]: bool, 是为OR事件块(表示该事件块中的条件只要满足一个即可;否则默认需要所有条件全部满足才可触发动作)

[3]: null,(保留)

[4]: number, sid(唯一标示)

[5]: Array,Conditions(触发条件)模型列表

[6]: Array,Actions(执行动作)模型列表

[7]: Array,SubEvent(子事件)列表(子事件只有当父事件被成功触发后才有可能执行)

Condition数据格式

Condition记录一个触发条件数据,是一个数组对象:

[0]: number,条件函数所属对象索引(即在runtime.types_by_index数组中的索引),-1=system_objects(系统对象)

[1]:function,条件函数在getObjectRefTable数组的索引

[2]:string, 行为名

[3]:number, 触发器类型, 0=不是触发器,1=触发器,2=快速触发器(直接返回true,无需执行判断)

[4]:bool,是否为循环条件(例如Loop,For,While等)

[5]:bool,是否求反(即当条件不成立时执行动作)

[6]:bool,是否为静态条件(始终为false)

[7]:number, sid(唯一标示)

[8]:bool,(保留,始终为false)

[9]:Array,条件函数使用的Parameter参数列表

Action数据格式

Action记录一个执行动作,是一个数组对象:

[0]: number,动作函数所属对象索引(即在runtime.types_by_index数组中的索引),-1=system_objects(系统对象)

[1]:function,动作函数

[2]:string, 行为名

[3]:number, sid(唯一标示)

[4]:bool(保留)false

[5]:Array,动作函数使用的Parameter参数列表

Parameter数据格式

Parameter记录了Condition或Action函数使用的参数,既可以是一个简单的数值,也可是表达式,在使用时先进行求值计算,然后再给函数使用,是一个数组对象:

[0]:number, 参数类型,0=number(数值),1=string(字符串),2=audio(音频文件),3=combo(枚举值),4=object(对象类型),5=layer(图层),6=layout(界面),7=any(任意类型),8=cmp(比较),9=keyboard(键盘),10=instance(对象实例变量),11=event(事件变量),12=file(文件信息),13=variadic(变长参数数组)

参数数据,根据类型不同而不同,长度也不同:

— number:ExpNode数据格式,具体格式详见下面

— string: ExpNode数据格式,具体格式详见下面

— audio: Array,音频文件格式,[0]文件名,[1]是否为音频文件

— combo:number,枚举值索引

—object: number,对象类型索引(即在runtime.types_by_index数组中的索引)

—layer: ExpNode格式,[0]2, [1]图层名

—layout:string,Layout名称

—any:ExpNode数据格式,具体格式详见下面

—cmp:number,比较类型,0=等于,1=不等于,2=小于,3=小于等于,4=大于,5=大于等于

—keyboard:number,按键编码

—instance:ExpNode,实例索引,具体格式详见下面

—event:string,事件变量名

—file:string,文件名

—variadic:Array,Parameter参数数组

ExpNode数据格式

ExpNode记录一个最小的表达式单元节点,是一个数组:

[0]:number,节点类型,0=整数常量,1=浮点数常量,2=字符串常量,3=变负,4=add(加法),5=subtract(减法),6=multiply(相乘),7=divide(相除),8=mod(取模),9=power,10=逻辑与,11=逻辑或,12=相等,13=不相等,14=小于,15=小于等于,16=大于,17=大于等于,18=条件表达式(IF-ELSE),19=系统表达式,20=对象表达式,21=实例变量表达式,22=对象行为表达式,23=变量表达式

节点数据,因类型不同而不同,长度也不同:

— 整数常量:长度为1,[0]整数数据

—浮点数常量:长度为1,[0]浮点数数据

—字符串常量:长度为1,[0]字符串数据

— 变负:长度为1,[0]Expnode表达式

— 相加:长度为2,[0]参数1表达式,[1]参数2表达式

— 相减:长度为2,[0]参数1表达式,[1]参数2表达式

— 相乘:长度为2,[0]参数1表达式,[1]参数2表达式

— 相除:长度为2,[0]参数1表达式,[1]参数2表达式

— mod:长度为2,[0]参数1表达式,[1]模数表达式

— power:长度为2,[0]参数1表达式,[1]幂次表达式

— 逻辑与:长度为2,[0]参数1表达式,[1]参数2表达式

— 逻辑或:长度为2,[0]参数1表达式,[1]参数2表达式

— 相等:长度为2,[0]参数1表达式,[1]参数2表达式

— 不相等:长度为2,[0]参数1表达式,[1]参数2表达式

— 条件表达式:长度为3, [0]IF条件表达式,[1]条件为真时执行的表达式,[2]条件为假时执行的表达式

— 系统表达式:长度为2,[0]系统函数对象索引(runtime.types_by_index),[1]表达式参数

— 对象表达式:长度为5,[0]对象类型索引(runtime.types_by_index),[1]函数在Refs中的索引,[2]是否返回字符串,[3]对象实例索引表达式, [4]对象函数参数数组

— 对象行为表达式:长度为6,[0]对象类型索引(runtime.types_by_index),[1]行为名, [2]函数,[3]是否返回字符串,[4] 对象实例索引表达式,[5]参数模型,与对象表达式使用同样的eval函数;

— 实例变量表达式:长度为4,[0]对象类型索引(runtime.types_by_index),[1]是否返回字符串,[2]对象实例表达式,[3]对象实例变量的索引(因为对象实例表达式求解得到的结果可能是一个数组)

— 变量表达式:长度为1,[0]string 变量名

介绍完了个数据格式,下一节介绍游戏数据的解析过程

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: