enchant.js @ #ojagnaha1015

ハッカソンはとても楽しかったです。ぼさっとしつつひたすらもくもく、というのはなかなかでした。確かに時間的には、あっという間に終わってしまったカンジだったので、一日かける程度の時間確保が必要なのか、作るスピードの問題なのかどうか。

とりあえず

昨日の成果を恥を承知の上で以下に。
最後の発表では遠慮させて頂いたのですが、なんとなく Scheme っぽいというか javascript 風味なソレを意識してるのかどうか的ソースだったりしてます。main.js のみです。

enchant();

window.onload = function() {
    game = new Game(320, 320); 
    game.fps = 24;                  
    game.preload(['chara1.gif','icon0.gif','bg.png']);

    game.onload = function() { 

        var ball = new Sprite(16, 16);
        ball.x = 100;
        ball.y = 320;
        ball.width = 16;
        ball.height = 16;
        ball.image = game.assets['icon0.gif'];
        ball.frame = 45;
        game.rootScene.addChild(ball);

        var bar = new Sprite(16, 16);
        bar.x = 100;
        bar.y = 280;
        bar.width = 16;
        bar.height = 16;
        bar.image = game.assets['icon0.gif'];
        bar.frame = 50;
        game.rootScene.addChild(bar);

        game.rootScene.addEventListener('touchstart', function(e){
            bar.x = e.localX
        });

        game.rootScene.addEventListener('touchmove', function(e){
            bar.x = e.localX
        });

        bar.addEventListener('enterframe', function(e) {
                if(this.intersect(ball)) {
                    if(game.frameCount % 3 == 0) {
                        if (xadd <= 0) {
                            xadd = -4;
                        } else {
                            xadd = 4;
                        }
                    } else {
                        if (xadd <= 0) {
                            xadd = -3;
                        } else {
                            xadd = 3;
                        }
                    }
                    yadd *= -1;
                }
            });

        var xadd = 3;
        var yadd = -2;
        game.rootScene.addEventListener('enterframe',function(){
                if (ball.x <= 0) xadd *= -1;
                if (ball.x >= 304) xadd *= -1;
                if (ball.y <= 0) yadd = 2;
                if (ball.y >= 304) yadd = -2;

                ball.x += xadd;
                ball.y += yadd;
            });

        var array = new Array(3);

        for(var i = 0; i < 3; i++) {
            array[i] = new Array(20);
            for(var j = 0; j < 20; j++){
                array[i][j] = new Sprite(16, 16);
                array[i][j].x = 16 * j;
                array[i][j].y = 100 - 16 * i;
                array[i][j].width = 16;
                array[i][j].height = 16;
                array[i][j].image = game.assets['icon0.gif'];
                array[i][j].frame = 16 + i;            

                array[i][j].addEventListener('enterframe', function(e) {
                        if(ball.within(this, 20)){
                            game.rootScene.removeChild(this);
                            yadd *= -1;
                        }
                    });

                game.rootScene.addChild(array[i][j]);
            }
        }

        game.frameCount = 0;        // 経過したフレーム数を数えるための変数

    }
    game.start();
    // プリロードをスタート
}

まだこの時点で全然ブロック崩しになっておらんですな。