Posted by & filed under Tips.

クラスの作成・継承は enchant.Class.create という関数を用いて行います。第一引数に渡されたオブジェクトを、クラスの定義のために使います。通常は、{} で囲ったオブジェクトリテラルを渡すことで定義します。コンストラクタメソッドは initialize というキーで定義します。

var myClass = enchant.Class.create({
    initialize: function(name){
        this.name = name;
    },
    sayHello: function(){
        alert('Hello! My name is' + this.name);
    }
});

var me = new myClass('Jack');
// -> me.name == 'Jack'

me.sayHello();
// -> alert('My name is Jack');

クラスの継承は、Class.create の第一引数に継承元のクラスを指定します。例えば以下なような定義で、Sprite クラスを継承し、initialize, walkTo をオーバーライドした Bear クラスを定義することができます。

var Bear = enchant.Class.create(enchant.Sprite, {
    initialize: function(){
        enchant.Sprite.call(this, 32, 32);
        this.x = 160;
        this.y = 160;
        this.image = game.assets['chara1.png'];
        this.frame = 5;
    },
    walkTo: function(x, y){
        this.tl.clear();
        this.tl.repeat(function(){
            this.frame = this.age % 2 + 5;
        }, 30).and().moveTo(x, y, 30);
    }
});

var bear = new Bear();
game.rootScene.addChild(bear);

// 歩き出す
bear.walkTo();

3行目の enchant.Sprite.call に注目してください。この関数呼出がないと、Bear クラスは正しく動作しません。この1行は、親クラスのコンストラクタを呼び出す処理です。JavaScript では、関数オブジェクトは call メソッドを持っており、これを呼び出すことで関数を実行できます (第一引数に this コンテキスト、第二引数以降に関数に渡す引数を渡します)。walkTo メソッドは Sprite にはありませんので、新しく定義されることになります。

This post is also available in: 英語

Comments are closed.