Posted by & filed under Tips.

enterframe イベントは以下の様な順番で dispatch される。Gameのenterframe が一番最後であることに注意。また、それぞれの age は、 enterframe が dispatch される前にインクリメントされる。(addChild された直後の初めての enterframe の age は 1となる)

  • Game.rootScene (rootScene.tl)
    • Group (Group.tl)
      • Sprite (Sprite.tl)
      • Sprite (Sprite.tl)
    • Group (Group.tl)
      • Sprite (Sprite.tl)
      • Sprite (Sprite.tl)
  • Game

EventTarget.js

dispatchEvent: function(e) {
    e.target = this;
    e.localX = e.x - this._offsetX;
    e.localY = e.y - this._offsetY;
    if (this['on' + e.type] != null){
        this['on' + e.type](e);
    }
    var listeners = this._listeners[e.type];
    if (listeners != null) {
        listeners = listeners.slice();
        for (var i = 0, len = listeners.length; i < len; i++) {
            listeners[i].call(this, e);
        }
    }
}

Core.js

_tick: function() {
    var now = this.getTime();
    var e = new enchant.Event('enterframe');
    e.elapsed = now - this.currentTime;
    this.currentTime = now;

    var nodes = this.currentScene.childNodes.slice();
    var push = Array.prototype.push;
    while (nodes.length) {
        var node = nodes.pop();
        node.age++;
        node.dispatchEvent(e);
        if (node.childNodes) {
            push.apply(nodes, node.childNodes);
        }
    }

    this.currentScene.age++;
    this.currentScene.dispatchEvent(e);
    this.dispatchEvent(e);

    this.dispatchEvent(new enchant.Event('exitframe'));
    this.frame++;
},

This post is also available in: 英語

Comments are closed.