HTML5引擎Construct2技术剖析
Posted 伪装狙击手
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTML5引擎Construct2技术剖析相关的知识,希望对你有一定的参考价值。
接上一节介绍游戏数据中的事件表单的格式说明。
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 变量名
介绍完了个数据格式,下一节介绍游戏数据的解析过程
以上是关于HTML5引擎Construct2技术剖析的主要内容,如果未能解决你的问题,请参考以下文章