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

HTML5引擎Construct2技术剖析(二)

2015-07-23 11:00 435 查看
接上一节,在讲解游戏数据解析之前,需要先介绍一下游戏数据格式。

(另,本人也写了一个基于C2引擎开发的游戏编辑器,能够导出与Construct2相同格式数据文件,发表在百度贴吧construct2吧 帖子地址为:http://tieba.baidu.com/p/3629460539

游戏数据文件格式

使用Construct2开发HTML5游戏,不需要写一行js代码,导出游戏时,编辑器中的关卡场景和事件表单的所有游戏数据全部保存在data.js文件中,数据采用json格式来组织,下面就分类介绍json格式中各个字段的含义(需要说明的是,有少量的字段的含义还没有弄清楚,可能会有个别字段含义理解错误,欢迎指正)

ProjectModel

一个游戏对应一个工程模型,整个游戏的数据模型采用ProjectModel数据格式来保存,是一个数组Array对象(按索引顺序来介绍各个字段含义):

[0]: string,游戏名

[1]: string, 第一个场景名, null表示缺省

[2]: Array,Plugin(插件)模型列表,具体格式详见后面

[3]: Array,ObjectType(对象类型)模型列表,具体格式详见后面

[4]: Array,Family(集合)模型列表,具体格式详见后面

[5]: Array,Layout(界面)模型数据,具体格式详见后面

[6]: Array,EventSheet(事件单)数据,具体格式详见后面

[7]: Array,预加载的音频数据列表,是一个2维数组,数组单元格式为

—[0]: string, 音频文件名;

—[1]: number,文件大小(字节数目)

[8]: string,资源文件相对目录

[9]: bool,是否采用像素对齐

[10]: number,原始设计宽度

[11]: number,原始设计高度

[12]: number,全屏模式,0 = off, 1 = crop(图像显示比例不随窗口大小变化,窗口越大显示的场景越多), 2 = scale inner(保持原始长宽比进行缩放,与窗口长宽比不一致时会裁掉部分场景), 3 = scale outer(保持原始长宽比进行缩放,与窗口长宽比不一致时会显示更多场景添补黑边;主要用于不支持缩放,但是支持多种分辨率), 4 = letterbox scale(保持原始长宽比,与窗口长宽比不一致时会出现黑边), 5 = integer letterbox scale(缩放模式与letterbox scale相同,但是缩放比例必须是整数倍)

[13]: bool,是否开启3D加速

[14]: bool,是否开启线性采样

[15]: bool,是否支持背景alpha

[16]: string,版本字符串

[17]: bool,是否使用高Dpi模式

[18]: bool,load屏幕是否采用Layout布局(如果为真,则第一个场景布局就是加载界面的布局)

[19]: number,loading屏幕显示风格,0=显示加载logo图片,1=显示进度条, 2=文字显示加载百分比)

[20]: number,显示方向, 0 = any任意, 1= portrait竖屏, 2 = landscape横屏)

[21]: number,下一个UID

[22]: bool,游戏暂停时屏幕变模糊

[23]: bool,全屏缩放显示质量, false =低质量, true =高质量

[24]: number,缩小显示质量(缩放比例小于1),0 = low (关闭mipmaps), 1 = medium (开启mipmaps, dense spritesheet), 2 = high (开启mipmaps, sparse spritesheet)

[25]: number,是否预加载声音文件,0 =否, 1 =是

[26]: string,游戏项目名

[27]: Array,Container(容器)数据列表,具体格式详见后面

Plugin数据格式

Plugin表示游戏用到的插件列表,是一个数组对象:

[0]:number,插件索引(在objectRefTable表中的索引),

[1]:bool,全局唯一

[2]:bool,是否在游戏世界中出现

[3]:bool,是否具有位置属性(用于add_common_aces函数向system_object对象添加相关的Cnds(条件)、Acts(动作)、Exps(表达式)函数)

[4]:bool,是否具有大小属性(用于add_common_aces函数,作用类似)

[5]:bool,是否具有角度属性(用于add_common_aces函数,作用类似)

[6]:bool,是否具有展现属性(用于add_common_aces函数,作用类似)

[7]:bool,是否具有深度属性(用于add_common_aces函数,作用类似)

[8]:bool,是否具有特效属性(用于add_common_aces函数,作用类似)

[9]:bool,是否每次tick需要重绘

ObjectType数据格式

ObjectType表示游戏中用到的实体类型,用于创建相应的对象实例,是一个数组对象:

[0]:string,类型名称

[1]:number,类型所属的插件原型在ObjectRef表中的索引

[2]:bool,是否为family

[3]:Array,内部实例变量SID数组

[4]: number,包含的行为数目

[5]: number,包含的特效数目

[6]:Array,使用的纹理文件数据,是一个数组对象:

—[0]:string,图像文件相对路径(相对于游戏资源目录)

—[1]: number,文件大小(字节)

—[2]: number,图像格式, 0表示RGBA8,1表示RGB8 ,2表示RGBA4,3表示RGB5_A1 ,4表示RGB565

[7]:Array,Animation(动画)数据列表,具体格式详见后面

[8]:Array,Behavior(行为)数据列表,是一个2维数组,每个数组单元格式为:

—[0]:string,行为名

—[1]: function, 行为对象构造函数

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

[9]:false, 是否为全局实例(即该类型的实例在退出Layout时不会删除,例如玩家控制的精灵)

[10]:false, 是否在loading界面中

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

[12]:Array,Effect(特效)数据,缺省提供的是混合渲染特效,也可以自定义特殊绘制效果,是一个长度为2的数组,数组单元格式为:

—[0]: string, 特效名称

—[1]: string,特效类型名

[13]:Array,TilePoly数据(尚未弄清楚)

[14]:Array,插件参数数组 (如果是singleglobal对象)

Animation数据格式

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

[0]: string,动画名称

[1]: number,每秒播放帧数(一般不超过60帧)

[2]: false,是否无限循环播放

[3]: number,重复播放次数(在非无限循环的情况下)

[4]: number,当动画结束时停留的帧号

[5]: bool,是否Ping-Pong模式(正向/反向交替播放),

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

[7]: Array,动画帧列表,是一个2维数组,数组单元格式为:

—[0]: string,动画帧文件相对路径(相对游戏资源目录)

—[1]: number,文件大小(字节数)

—[2]: number,在纹理文件上X偏移

—[3]: number,在纹理文件上Y偏移

—[4]: number,宽度,如果动画文件就包含一帧(即整个图片为一个动画帧),则为0

—[5]: number,高度,如果动画文件就包含一帧,则为0

—[6]: number,持续的帧数,默认为1

—[7]: number,原点X坐标相对位置(取值0-1)

—[8]: number,原点Y坐标相对位置(取值0-1)

—[9]:Array,自定义的锚点信息,是一个2维数组,数组单元格式为:

——[0]: string,锚点名

——[1]: number, X坐标相对位置(取值0-1)

—[2]: number, Y坐标相对位置(取值0-1)

—[10]:Array,碰撞多边形顶点列表,每2个值表示一个顶点的XY相对坐标(相对于原点而且,而不是纹理文件左上角)

—[11]: number,像素格式, 0表示RGBA8,1表示RGB8 ,2表示RGBA4,3表示RGB5_A1 ,4表示RGB565

Family数据格式

若干个对象类型ObjectType可以组成一个Family, 向Family赋予特效、参数、行为等数据,当创建对象实例时,对象实例除了具有自身类型所有属性外,还会加入所在Family中的属性,其结构是一个变长数组:

[0]: number,Family对应的对象类型索引(即在runtime.types_by_index数组中的索引)

[1-n]: number,Family中包含的对象类型索引列表

需要说明,数组长度可变,Family中包含n类对象,数组总长度为n+1。Family中的对象必须属于同一类插件

Layout数据格式

Layout记录一个完整界面的数据,是一个数组对象:

[0]: string,界面名称

[1]: number,原始宽度

[2]: number,原始高度

[3]: bool,是否支持无限滚动

[4]: string,关联的EventSheet名(只能关联一个EventSheet)

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

[6]: Array,场景中的Layer(图层)列表

[7]: Array,场景中不在world中(不可见)的实例列表

[8]: Array,场景中使用的特效列表

Layer数据格式

Layer记录一个图层的数据模型,是一个数组对象:

[0]: string,图层名称

[1]: number, 图层在Layout中的顺序索引(索引小的图层先绘制)

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

[3]: bool,是否初始可见

[4]: Array,背景颜色,长度为3:

—[0]: number, 红色

—[1]: number, 绿色

—[2]: number, 蓝色

[5]: bool,是否透明

[6]: number,图层在X坐标方向的滚动速度倍数(相对正常速度)

[7]: number,图层在Y坐标方向的滚动速度倍数(相对正常速度)

[8]: number,透明度(取值0~1)

[9]: bool, 是否强制图层渲染到临时纹理上(即使在没有特效情况下);如果图层使用的特效,则会先绘制到临时纹理上,然后在绘制到Canvas上

[10]: bool, 是否使用渲染网格,优化包含很多静态对象的大图层渲染

[11]: number,缩放比例

[12]: number,混合模式,

[13]: number,默认特效索引(当指定的特效无效或不存在时,则调用该特效替换)

[14]: Array,图层中包含的Instance(对象实例)列表,,具体格式详见后面

[15]: Array,图层中包含的Effect列表,是一个2维数组,数组单元格式为:

—[0]: string,特效ID名

—[1]: string,特效类型名

—[2]: Array,参数列表,长度可变,与特效使用的参数数目一致

Instance数据格式

Instance记录在图层中的一个对象实例,是一个数组:

[0]: Array,对象缺省实例的初始化数据,是一个数组(如果不是tilemap,则不要长度大于13,否则碰撞检测有问题):

[0]:number,x坐标

[1]:number,y坐标

[2]:number,z坐标

[3]:number,宽度

[4]:number,高度

[5]:number,深度

[6]:number,旋转角度(弧度)

[7]:number,透明度

[8]:number,原点x坐标

[9]:number,原点y坐标

[10]:number,混合渲染模式

[11]:number,特效回调函数索引(当指定特效无效时,使用该特效代替)

[12]:Array,特效参数数组,如果特效无参数,则为空数组

[13]: Array, TileMap格子数据,其格式如下

—[0] number,格子列数

—[1] number,格子行数

—[2] string,格子数据,采用合并方式,如果连续格子数据相同,例如0,0,则会处理为2x0

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

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

——[3]: Array,自定义参数数据,是一个2维数组,数组单元格式为:

———[0]:类型不确定,参数值

———[1]:string,参数名

——[4]: Array,行为属性数据

——[5]: Array,插值属性数据,与插件定义顺序一致

Container数据格式

Container记录一个容器集合,是一个变长数组,数组元素是对象类型索引;每个对象类型只能属于1个容器;

下一个节详见介绍事件表单(EventSheet)数据格式

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