読者です 読者をやめる 読者になる 読者になる

フニゲの開発日記

Electronとか...

Cocos2d-JSのクラスとインスタンスの取得

Cocos2d-JS

 まあ公式の移行ガイドをよく読め、ということに尽きるのですが。

 v2時代のオブジェクトの初期化については、前にちょっと書いたことがあった。

 例えばスプライトを生成して初期化する場合、cc.Sprite.create()を使ってこんな感じに初期化していた。

// v2までの書き方
var sprite = cc.Sprite.create("hoge.png");

 v2の時代は、各オブジェクトにctor()とinit()という2つの初期化関数があって、必ずこの順番に呼ばないといけなかった。そのためにcreateを使うという規約があったわけだが、v3ではこのへんが整理されたので、普通にnewすれば、暗黙的にctor()は呼ばれるし、init()を呼ぶ必要はない。

// v3以降
var sprite = new cc.Sprite("hoge.png");

 既存のクラスにはcreate関数も用意されているが、自分で新しいクラスを定義するときは、今後は新しいルールに合わせて、ctorだけで初期化できるように書いたほうがいいと思う。

// v3でクラスを継承する例
var  Player = cc.Sprite.extend({
    ctor:function () {
        this._super("player.png"); // 親クラスのctorを呼ぶ

        // ここでインスタンスの初期化をしよう
        this.param({x:240, y:160, ... });
        ....
    },

//  init:function () {
//      this._super();
//      // 使わない
//      return true;
//  },
});

// create関数はもう使わないので定義しないでもいいのだが一応
Player.create = function () {
   return new Player(); 
};

 あと、これまでgetInstance()を使っていたシングルトンの取得は、頭文字を小文字にすることで短く書けるようになった。初心者は混乱するかも知れないが、これは楽ちんだと思う。

// v2までの書き方
var cache = cc.TextureCache.getInstance();

// v3以降
var cache = cc.textureCache;
広告を非表示にする