enchant.js

design and usage

about me

What is enchant.js?

design

JavaScriptらしい書き方で

design - OOP

表示オブジェクトツリーに登録、描画

var player = new Sprite(32, 48);
player.image = game.assets['player.png'];
var enemy = new Sprite(32, 32);
enemy.image = game.assets['enemy.png'];

// 描画ルートオブジェクト
var scene = game.currentScene;
scene.addChild(player);
scene.addChild(enemy);

design - Event Driven

addEventListenerを使った非同期処理

var man = new Sprite(32, 32);
// 毎フレームごとの処理
man.addEventListener('enterframe', function() {
    ...
});
// タッチされたときの処理
man.addEventListener('touchstart', function(e) {
    var x = e.localX;
    var y = e.localY;
    ...
});

design

(like ActionScript)

getting started

<script type="text/javascript" src="enchant.js"></script>
<script type="text/javascript" src="game.js"></script>

game.js

// クラスのエクスポート
enchant();

window.onload = function() {
    var game = new Game(320, 320); // ゲームのスクリーンサイズ
    game.start();
};

getting started

game.js

window.onload = function() {
    var game = new Game(320, 320);
    game.preload('bear.gif'); // 画像をあらかじめ読み込んでおく
    game.onload = function() { // 画像読み込み終了時に呼ばれる
        var bear = new Sprite(20, 30);
        bear.image = game.assets['bear.gif'];
    };
    game.start();
};

bear.gif

getting started

game.js

window.onload = function() {
    var game = new Game(320, 320);
    game.preload('bear.gif');
    game.onload = function() {
        var bear = new Sprite(20, 30);
        bear.image = game.assets['bear.gif'];
        bear.addEventListener('enterframe', function() {
            this.x += 3; // 毎フレームごとに3ピクセル移動
        });
        game.rootScene.addChild(bear); // 表示オブジェクトツリーに追加
    };
    game.start();
};

class hierarchy

Game, Scene

Node, Entity, Group

Sprite, Surface

game.js

var bear = new Sprite(20, 30);
bear.image = game.assets['bear.gif']; // assetsにはSurfaceが入っている

Label

game.js

var label = new Label();
label.text = 'label';

Map

game.js

var map = new Map(16. 16); // タイルサイズ
map.image = game.assets['map1.gif'];
map.loadData([
    [0, ...],
    [0, ...],
    [0, ...]
    ..
]);

map1.gif

Event, EventTarget

Game, NodeがEventTargetを継承しており、これらのメソッドを持つ

Event, EventTarget

イベントタイプの例1

Event, EventTarget

イベントタイプの例2

ある特定の入力を左ボタン入力として設定できる

Event, EventTarget

イベントタイプの例2

キーの入力と左ボタンとして設定 (キーボード環境下)

game.keybind(keyCode, 'left');

Entityを左ボタンとして設定 (タッチ環境下)

entity.buttonMode = 'left';

Event, EventTarget

イベントタイプの例2

設定された形に関わらずGame, Sceneは必ずこのイベントを受け取る

なお、デフォルトでArrow Keyはleft, right, up, downにバインド

Class

Class

ライブラリのクラスを継承したクラスを定義したいときにも使える

var Ball = Class.create(Sprite, {
    initialize: function() {
        // スーパークラスのコンストラクタを適用
        Sprite.apply(this, arguments);
        ...
    }
});

// or..
var Ball = Class.create(Sprite);
Ball.prototype.initialize = function() {
    ...
};