Construct2从接触到使用已有半年时间,优点就是上手容易,开发快,但只适合小型2D-H5游戏且是闭源,很适合懂技术的策划使用,对程序猿来讲,玩玩即可。同大多数H5游戏引擎相同,也是一次开发,导出多平台包。引擎本身只提供基础功能,插件的使用及开发是Construct2核心之一。官方论坛上有各种需要的插件,C2插件大神Rex贡献尤为突出。
前端架构建议
- 将全局变量统一放到一个事件表中,我习惯命名为Global,统一管理全局变量。
- 不能过分使用全局变量,根据变量的作用域分类,只跟某个对象有关放到对象的局部变量中;如果变量只在当前layout有效,可以考虑放到对象的局部变量中,或者当前布局所有事件放到一个大组里,变量声明在当前组内。
- 资源管理上,在Object types下建立子文件夹;对象动画较多或者打算将多个对象合并到一个对象上(也建议这么做)时,对象动画位置建立子文件夹。
- 对于行为完全相同的对象,要放到同一个family中。
- 根据功能分类,合理使用Group。
- 多使用Function,如果当前布局事件过多(如超过200条),将所有函数放到一个事件表中,然后在主事件表中引入。
- 如果不使用 C2默认的loader布局,将use loader layout选为yes , 将first layout选择个人定义的加载布局,但是如果个人设置的加载布局稍微有些复杂,C2的默认的loader布局依然会显示,此时将发布包的logo替换即可。
- 若一个物体如boss由多个对象组成,将多个对象放到一个container中;希望某些对象同时创建或者删除,也考虑使用container,很好用。使用container时,选择container的某个对象,此时可直接操作该container的其他对象,选择当前对象的过程也是选择当前整个container。
- 对象尽量少,若多个对象有不同动画但是功能完全相同,统一成一个对象(类)上,通过不同动画控制显示或者通过同一动画的不同帧来控制。
- spriter在construct2中支持良好,很多情况下都可以选择骨骼动画而不是帧动画,尤其是对象数量较少的情况下。
性能优化及使用小结
- 关闭不需要碰撞对象的碰撞(默认都开启),提高前端性能。
- C2若使用全套物理引擎即对象引入physics属性,对于pc端,为保证性能,物理对象不能超过100,移动端不能超过40。物理对象只能与物理对象交互。
- 若浏览器不支持webgl,运行期间会出现闪退,禁用webgl即可,此时为canvas。
- 将要声音的格式转为wav,引入的过程,引擎会自动转为ogg和m4a两种格式。
- Form control下的对象如Button处于游戏视图最上层。可直接更改css更改样式。
- C2可打包成多种类型,如H5,Android,Nw.js等。打包成app,需之后使用phonegap build等工具构建app。
- talkingData等接入,需在index.html文件中引入外源文件。
踩过的坑
- set size 不能和 set scale连用,相当于同一种操作,都是在原始对象尺寸上做更改,后者会覆盖前者。
- 设置子弹属性,应先设置速度,再设置角度,因为如果设置角度,速度若为0,不生效。
- C2数组push元素,之后clear,不会生效,push的元素依然在。
- 隐形Button不可用,设置成visible后,touchEnabled也被禁用。
- invisible的对象仍可touch,如果想实现打开某个页面后,下面图层的对象不可touch,可采取给不可touch的对象加入控制变量及cooldown属性(冷却时间设为0.1秒),当页面打开后,控制变量更改,cooldown request,当cooldown finish时,控制变量重置。
- C2中类型有限,而且调用calljs将text类型的变量作为参数时,应如下”output(“””&userID&”””)”,注意userID两侧的引号,若无引号”output(“&userID&”)”,会导致获取到的userID不是字符串,而是没有引号的字符串,很奇怪。
- callJs不可在on start of layout使用。
- 涉及到回调处理时,均需封装成C2插件,在插件内执行。如superSDK接口调用。
- C2中无法实现console.log(),只能设置Text值进行输出,可使用callJS, js中输出。执行某个操作但是需在回调中处理逻辑,需封装成插件。
- C2插件大神rexRainbow说,c2没有什么是一个wait不能解决的,如果有,那就两个。合理使用wait0,填引擎自身的坑。
曾使用及开发的插件
behaviors插件
- 设置对象椭圆运动—cicle
- 实现通过名字创建特定对象,需behavior插件rex_bnickname与plugin插件rex_nickname一同引入
- 冷却时间,倒计时使用,需behavior插件rex_cooldown与plugin插件rex_timeline一同引入
- rex_moveto,设置对象移动到某个位置,常用做爆炸类特效
- rex_pin2imagepoint,官方只能将对象pin到另一个对象imagePoint=0的位置,只有一个pin点,使用此行为可以pin到某个对象的不同imagePoint上
- liteTween,缓动动画
effects插件
- 浮雕颜色anaglyphcolor
- 背景模糊特效basicBlur
plugins插件
- JSON_for_construct2-master—JSON数据存储与使用
- callJS—调用外部js
- scml是C2的spriter骨骼动画插件
- spritefont+,第三方字体插件;C2SpriteFont制作工具,C2字体制作工具,配合C2自带的spritefont使用
- rex_gfsm为FSM插件,有限状态机
- 最近开发的IO游戏炸弹人,前后端通信使用网易的Pomelo。C2的数据类型很少,数据处理这块做的不好,于是将pomelo及superSDK封装为C2插件,游戏客户端与服务器的数据处理及通信等即在这两个插件中完成。