初探Cocos Creator

组件式开发确实不错,下面请教几个问题,请大神不吝赐教

贴个 demo的例子

cc.Class({
    extends: cc.Component,

    properties: {

        speed: 0.1,

        horizontal: {
            default: null,
            type: cc.Sprite
        },

        vertical: {
            default: null,
            type: cc.Sprite
        },

        radial_round: {
            default: null,
            type: cc.Sprite
        },

        radial_semicircle: {
            default: null,
            type: cc.Sprite
        }
    },

    update: function (dt) {
        // update fill start
        this._updataFillStart(this.horizontal, dt);
        this._updataFillStart(this.vertical, dt);
        // update fill range
        this._updateFillRange(this.radial_round, 1, dt);
        this._updateFillRange(this.radial_semicircle, 0.5, dt);
    },

    _updataFillStart: function (sprite, dt) {
        var fillStart = sprite.fillStart;
        fillStart = fillStart > 0 ? fillStart -= (dt * this.speed) : 1;
        sprite.fillStart = fillStart;
    },

    _updateFillRange: function (sprite, range, dt) {
        var fillRange = sprite.fillRange;
        fillRange = fillRange < range ? fillRange += (dt * this.speed) : 0;
        sprite.fillRange = fillRange;
    }

});

问题1:为什么每个指定的cc类都要 来个default:null
问题2:cc.class 的实现、继承方式是什么?在哪能看到基类的实现,这样好写扩展

再加一个问题:生命周期 是否 有onEnter onExit 等接口

是啊,为什么啊,我也有同样的问题。js基本语法里面似乎没有class,这还是cpp的部分。感觉有点混淆

  1. 可以不写default: null,直接写horizontal: cc.Sprite
  2. 没有看过cc.Class的代码,不过应该也是通过扩展prototype原型链来实现的。我觉得cc.Class是没有必要看的,只要看它的用法就行了,就像写一个C++类不需要关心编译器怎么实现的,只要看完文档会用就行了:
    http://www.cocos.com/docs/creator/scripting/class.html
    http://www.cocos.com/docs/creator/scripting/reference/class.html
  3. 目前的生命周期回调有:
    http://www.cocos.com/docs/creator/scripting/life-cycle-callbacks.html
  4. class的功能是语言里面很重要的一个特性,ES2015以前JS要实现类似类的功能都是通过prototype来实现的,自己写很不方便。当时的cocos2d-x js就提供了someclass.extends()方法帮我们方便地创建一个类,与现在的cc.Class差不多。ES2016推出了JS原生的类的功能(通过Babel编译为ES2015后其实也是通过prototype实现的),但是与cc.Class提供的功能差不多,我觉得就是功能类似、写法不同的两个语法糖。

感谢回复,最近也在看文档。最不能忍的是creator 不稳定老是要重启才能看到 错误,还有一点就是物理引擎支持太弱,物理模拟都没法做

最好不能忍的一点,内置编辑器太渣,因为之前写lua 用惯了sublime 现在还在用。没次写完代码还得要点一下creator 让他编译成功一下?才能点运行。用起来很不顺心

有,onLoad, onDestroy, onEnable, onDisable 等接口,详见 http://www.cocos.com/docs/creator/scripting/life-cycle-callbacks.html

因为 cc 类通常具备序列化能力,为了强调这里的值是默认值而不是当前值,所以需要写上 default: xxx。当然如果你直接写 horizontal: cc.Sprite 也是等价的