「ゼロからはじめるenchant.js入門」勉強1日目−2

3.1ラベルの利用のサンプルを書いた。

ほんの最初らへんのサンプルのくせして、やたら無駄にフクザツに見えるサンプル。


やっていることは、

①ルートシーンでフレーム更新ごとにラベルをはっつける処理を呼ぶ
②ラベルをはりつける処理では、ただはりつけるだけじゃなくて、移動させて一定距離移動したら消す、っていう定期処理を入れる

というもの。

色をランダムで生成したり、ただラベルを表示させるだけじゃなくて、移動させる+一定条件下で自動的に消えるようにしているから、無駄に複雑に見える。

↓くらいの手順を踏んだほうが個人的にはわかりやすい。自分で書いてみるつもり。

①ラベルをひとつ表示させる
②①+一定時間で自動的に消す
③①+タッチしたら消す
④ラベルを移動させるようにする
⑤ラベルを移動させたあとで自動的に消す
⑥ラベルの色を変える
⑦ラベルを複数出す
⑧本にあるものを作る

あと、ポイントは、x軸とy軸に考え方について、左上が(0,0)だというところ。
つまり、右に移動するとxは増加し、下に移動するとyが増加する。
デクリメントしてるのに、なんで実行結果の表示は上昇してるの? と疑問に思ってしまった。

enchant();
window.onload = function() {
    //ゲームオブジェクトの生成
    var game = new Game(320,320);
    
    //FPSの指定
    game.fps = 16;
    
    //ラベルの追加関数
    game.addLabel = function(text, color, x, y){
        //ラベルの生成
        var label = new Label(text);
        label.font = "16px monospace";
        label.color = color;
        label.x=x;
        label.y=y;
        game.rootScene.addChild(label);
        
        //ラベルの定期処理
        label.tick=0;
        label.addEventListener("enterframe", function(){
            label.y --;
            label.tick ++;
            
            //ラベルの削除
            if(label.tick > 10) game.rootScene.removeChild(label);
        });
    };
            
    //シーンの定期処理
    game.tick=0;
    game.rootScene.addEventListener("enterframe", function(){
        if((game.tick %3)===0){
            var score = rand(100);
            var r = rand(256);
            var g = rand(256);
            var b = rand(256);
            var x = rand(300);
            var y = rand(300);
            game.addLabel(score + "点","rgb("+r+","+g+","+b+")",x,y);
        }
        game.tick++;
    });
    
    //ゲームの開始
    game.start();
};

//乱数の生成
function rand(num){
    return Math.floor(Math.random() *num);
}