Construct2使用心得

Construct2从接触到使用已有半年时间,优点就是上手容易,开发快,但只适合小型2D-H5游戏且是闭源,很适合懂技术的策划使用,对程序猿来讲,玩玩即可。同大多数H5游戏引擎相同,也是一次开发,导出多平台包。引擎本身只提供基础功能,插件的使用及开发是Construct2核心之一。官方论坛上有各种需要的插件,C2插件大神Rex贡献尤为突出。

前端架构建议

  1. 将全局变量统一放到一个事件表中,我习惯命名为Global,统一管理全局变量。
  2. 不能过分使用全局变量,根据变量的作用域分类,只跟某个对象有关放到对象的局部变量中;如果变量只在当前layout有效,可以考虑放到对象的局部变量中,或者当前布局所有事件放到一个大组里,变量声明在当前组内。
  3. 资源管理上,在Object types下建立子文件夹;对象动画较多或者打算将多个对象合并到一个对象上(也建议这么做)时,对象动画位置建立子文件夹。
  4. 对于行为完全相同的对象,要放到同一个family中。
  5. 根据功能分类,合理使用Group。
  6. 多使用Function,如果当前布局事件过多(如超过200条),将所有函数放到一个事件表中,然后在主事件表中引入。
  7. 如果不使用 C2默认的loader布局,将use loader layout选为yes , 将first layout选择个人定义的加载布局,但是如果个人设置的加载布局稍微有些复杂,C2的默认的loader布局依然会显示,此时将发布包的logo替换即可。
  8. 若一个物体如boss由多个对象组成,将多个对象放到一个container中;希望某些对象同时创建或者删除,也考虑使用container,很好用。使用container时,选择container的某个对象,此时可直接操作该container的其他对象,选择当前对象的过程也是选择当前整个container。
  9. 对象尽量少,若多个对象有不同动画但是功能完全相同,统一成一个对象(类)上,通过不同动画控制显示或者通过同一动画的不同帧来控制。
  10. spriter在construct2中支持良好,很多情况下都可以选择骨骼动画而不是帧动画,尤其是对象数量较少的情况下。

性能优化及使用小结

  1. 关闭不需要碰撞对象的碰撞(默认都开启),提高前端性能。
  2. C2若使用全套物理引擎即对象引入physics属性,对于pc端,为保证性能,物理对象不能超过100,移动端不能超过40。物理对象只能与物理对象交互。
  3. 若浏览器不支持webgl,运行期间会出现闪退,禁用webgl即可,此时为canvas。
  4. 将要声音的格式转为wav,引入的过程,引擎会自动转为ogg和m4a两种格式。
  5. Form control下的对象如Button处于游戏视图最上层。可直接更改css更改样式。
  6. C2可打包成多种类型,如H5,Android,Nw.js等。打包成app,需之后使用phonegap build等工具构建app。
  7. talkingData等接入,需在index.html文件中引入外源文件。

踩过的坑

  1. set size 不能和 set scale连用,相当于同一种操作,都是在原始对象尺寸上做更改,后者会覆盖前者。
  2. 设置子弹属性,应先设置速度,再设置角度,因为如果设置角度,速度若为0,不生效。
  3. C2数组push元素,之后clear,不会生效,push的元素依然在。
  4. 隐形Button不可用,设置成visible后,touchEnabled也被禁用。
  5. invisible的对象仍可touch,如果想实现打开某个页面后,下面图层的对象不可touch,可采取给不可touch的对象加入控制变量及cooldown属性(冷却时间设为0.1秒),当页面打开后,控制变量更改,cooldown request,当cooldown finish时,控制变量重置。
  6. C2中类型有限,而且调用calljs将text类型的变量作为参数时,应如下”output(“””&userID&”””)”,注意userID两侧的引号,若无引号”output(“&userID&”)”,会导致获取到的userID不是字符串,而是没有引号的字符串,很奇怪。
  7. callJs不可在on start of layout使用。
  8. 涉及到回调处理时,均需封装成C2插件,在插件内执行。如superSDK接口调用。
  9. C2中无法实现console.log(),只能设置Text值进行输出,可使用callJS, js中输出。执行某个操作但是需在回调中处理逻辑,需封装成插件。
  10. 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插件,游戏客户端与服务器的数据处理及通信等即在这两个插件中完成。