ニャイコロ

すごろくをつくろうと思って、まずつくったサイコロです。

デザインは、娘が厚紙で作ったサイコロをそのまま再現しました。

猫がサイコロを転がすのかと思いきや、いっしょにぐるぐる転がっているだけというところがポイントです。

苦労したところは、音です。ドラムロールの音を長く鳴らして、振ったところで止めるということをしたかったのですが、どうやってもうまく制御できないので、断念しました。音についてはいろいろ難しいところがあるようです。

// Main

console.log("Hello EnchantJS!!");

var assets = [    
    "images/title.png",// タイトル
    "images/cf307/nekosai128abc.png",
    "sounds/cf307/drum-roll1.mp3",
    "sounds/cf307/roll-finish1.mp3",
    "sounds/cf307/cat-cry1.mp3",
];

function gameStart(){// ゲーム画面
    scene = gameManager.createGameScene();
    core.replaceScene(scene); core.resume();

    //==========
    // ここから
    //==========

    scene.backgroundColor = "#FADCE9";

    // サイコロ
    var sai = new ExSprite(128, 128);
    sai.image = core.assets["images/cf307/nekosai128abc.png"];
    sai.x = 320 / 2 - 128 / 2;
    sai.y = 480 / 2 - 128 / 2;
    sai.originY = 0;
    scene.addChild(sai);

    // サイコロ
    // タッチするとサイコロを振る
    scene.addEventListener(Event.TOUCH_START,function(){
        var sound1 = core.assets["sounds/cf307/drum-roll1.mp3"].clone();
        sound1.play();
        scene.tl.delay(32).then(function(){
            sound1.stop();
        });
     //sound1.src.loop = true;
        // サイコロが下にあるとき(回ってないとき)   
        if(sai.y == 480 / 2 - 128 / 2){
            console.log("回ってないとき");
            sai.tl.moveBy(0, -150, 3, enchant.Easing.QUART_EASEIN);
            sai.tl.moveTo(320 / 2 - 128 / 2, 480 / 2 - 128 / 2 - 100, 2);
            sai.frame = [0, 1, 2, 3, 4, 5];
            sai.scale(0.8, 0.8);             
        }
        // 上にあるとき(回っているとき)
        if(sai.y == 480 / 2 - 128 / 2 - 100){           
            console.log("回っているとき");
            sai.tl.moveTo(320 / 2 - 128 / 2, 480 / 2 - 128 / 2, 5, enchant.Easing.BOUNCE_EASEOUT);//and().scaleTo(1.2, 1.2, 0);
            sai.tl.scaleTo(1, 1, 0);
            sound1.stop();
            var sound = core.assets["sounds/cf307/roll-finish1.mp3"].clone();
            sound.play();
            sai.tl.delay(5).then(function(){
                var sound2 = core.assets["sounds/cf307/cat-cry1.mp3"].clone();
                sound2.play();
            });
            // さいころの目
            var s0 = getRandom(1, 6);
            if(s0 == 1){
                console.log("1");
                sai.frame = [0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, null];
            }   
            if(s0 == 2){
                //sai.frame = [7];
                console.log("2");
                sai.frame = [12, 12, 12, 12, 12, 12, 12, 12, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, null];     
            }
            if(s0 == 3){
                //sai.frame = [8]; 
                console.log("3"); 
                sai.frame = [13, 13, 13, 13, 13, 13, 13, 13, 8, 8, 8, 8, 8, 8, 8, 8, 8, 13, null];     
            }
            if(s0 == 4){
                //sai.frame = [9];
                console.log("4");
                sai.frame = [3, 3, 3, 3, 3, 3, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, null];      
            }
            if(s0 == 5){
                //sai.frame = [10];
                console.log("5");
                sai.frame = [14, 14, 14, 14, 14, 14, 14, 14, 10, 10, 10, 10, 10, 10, 10, 10, 10, 14, null];                  
            }
            if(s0 == 6){
                //sai.frame = [11];
                console.log("6"); 
                sai.frame = [15, 15, 15, 15, 15, 15, 15, 15, 11, 11, 11, 11, 11, 11, 11, 11, 11, 15, null];              
            }      
        }
    });
    
    //==========
    // ここまで
    //==========

}

function getRandom(start, end) {
    return start + Math.floor( Math.random() * (end - start + 1));
}

function titleStart(){// タイトル画面
    var scene = gameManager.createTitleScene();
    core.replaceScene(scene); core.pause();
    scene.on(enchant.Event.TOUCH_START, function(){gameStart();});
}

//==========
// EnchantJS
enchant();
var gameManager;
var core;
var scene;
window.onload = function(){
    gameManager = new common.GameManager();
    core = gameManager.createCore(320, 480);
    core.preload(assets);
    core.onload = function(){titleStart();};
    core.start();
}

激重の極みeasy? 改

前回と変えたのは、球を大きくしたので、一度に消えるブロックが増えたところです。さらに負荷が高まりましたが難易度としてはeasyになりました。

得点によって球の大きさを変えようとしたのですが、これも場合によってすり抜けてしまうので、やめました。

それから、このシリーズ全部に共通していますが、クリアの判定がややこしいことになっています。2000個目のブロックに当たった瞬間にクリアにするようにしたために、「スコアが1999でブロックに当たる」と「当たってスコアが2000になる」の二つの場合をつけなければなりませんでした。衝突のタイミングが判定のタイミングになるからです。

だから、スコアラベルのところENTER_FRAMEなので、ここでやればよかったんじゃないかと思うのですが、そのときはENTER_FRAMEの意味がよくわからなかったのかもしれません。

この頃、windowsからmacに変えたのですが、windowsで綺麗に字下げをして揃えて書いたつもりなのに、macで開くとぐちゃぐちゃになっていることがよくありました。

先生にきいたら教えてくださったのですが、Windowsでは全角と半角が混ざっていても気づかないので、ところどころ全角の半角が混ざっていたために、ずれてしまっていたのでした。それからは、全部半角スペースでやるようにしました。

あと、ここにソースコードを貼るときに、改行がどうしてもずれてしまいます。貼った後に修正するのですが、行が多いので面倒です。何かいい方法はないものかといろいろ試していますがまだ見つかりません。

// Main
console.log("Hello EnchantJS!!");
var assets = [
    "images/back_space.png",    
    "images/kati_tanuki.png",
    "images/title.png",// タイトル
    "sounds/coin.mp3",
    "sounds/jump.mp3",
    "images/cf307/baayoko64.png",
    "images/xe_bullet_r.png",
    "images/gameover.png", 
    "images/cf307/blueground.png",
    "sounds/cf307/decision1.mp3",
    "sounds/cf307/decision3.mp3",
    "sounds/cf307/rabohyuuu.mp3",
    "images/gameclear.png",
    "sounds/cf307/trumpet-dub1.mp3",
    "sounds/cf307/boyoyon1.mp3",
    "sounds/cf307/trumpet1.mp3",
    "sounds/cf307/dondonpafupafu1.mp3",
    "images/block_d.png", 
    "images/cf307/block8p.png", 
    "sounds/cf307/ME014-090610-loss02-wav.mp3",
    "sounds/cf307/hit04.mp3",  
    "images/cf307/10_480.png", 
    "images/bomb.png",
    "images/b_blue.png",  
];
function gameStart(){// ゲーム画面
    scene = gameManager.createGameScene();
    core.replaceScene(scene); core.resume();
    //==========
    // ここから
    //==========
    scene.backgroundColor = "darkgray";
    
    // 背景
    var sky = new ExSprite(320, 480);
    sky.image = core.assets["images/back_space.png"];
    scene.addChild(sky);

    // 地面
    var ground = new ExSprite(320, 55);
    ground.image = core.assets["images/cf307/blueground.png"];
    ground.x = 0;
    ground.y = 480; 
    scene.addChild(ground);

   // 壁左
    var kabe = new ExSprite(10, 480);
    kabe.image = core.assets["images/cf307/10_480.png"]; 
    kabe.x = -10;
    kabe.y = 0;
    scene.addChild(kabe); 
    kabe.tag = "kabe";

   // 壁右
    var kabem = new ExSprite(10, 480);
    kabem.image = core.assets["images/cf307/10_480.png"]; 
    kabem.x = 320;
    kabem.y = 0;
    scene.addChild(kabem); 
    kabem.tag = "kabem";

    // バー
    var bar = new ExSprite(64, 6);
    bar.image = core.assets["images/cf307/baayoko64.png"];
    scene.addChild(bar);
    bar.x = 320 / 2 - 32;
    bar.y = 480 - 32;
    bar.tag = "bar";
    //bar.scale(10, 1);// テスト用

    // 玉グループ
   var tamaGroup = new Group();
    scene.addChild(tamaGroup); 
        
    // 玉
    var tama = new ExSprite(9, 9);
    tama.image = core.assets["images/xe_bullet_r.png"];
    //scene.addChild(tama);
    tama.x = bar.x + bar.width / 2 - tama.width / 2;
    tama.y = bar.y - tama.height;
    tamaGroup.addChild(tama);
    tama.originX = 0;
    tama.originY = 0;
    tama.scale(2, 2);  

    // 最初の音
    var sound0 = core.assets["sounds/cf307/decision3.mp3"].clone();
    sound0.play();   

    // 玉の動き
    var x1 = getRandom(0, 320 - 5);
    //var x1 = getRandom(-320, 0);// テスト用
    tama.tl.moveTo(x1, -9, 32, enchant.Easing.SINE_EASEOUT); 

    // 最初に跳ね返る音
    tama.tl.then(function(){
        var sound1 = core.assets["sounds/cf307/decision1.mp3"].clone();
        sound1.play();    
    });
    var x2 = getRandom(0, 320 - 5);
    tama.tl.moveTo(x2, 480, 32, enchant.Easing.SINE_EASEOUT); 

    // ブロックグループ
    var blockGroup = new Group();
    scene.addChild(blockGroup);

    // スコア表示
    var score = 0;
    scoreLabel = new Label('SCORE : 0');
    scene.addChild(scoreLabel);
    scoreLabel.x = 10;
    scoreLabel.y = 10;
    scoreLabel.color = 'white';
    scoreLabel.font = "24px 'PixelMplus10'";
    scoreLabel.addEventListener(Event.ENTER_FRAME, function() {
        scoreLabel.text = 'SCORE : ' + score;
    });
    
    // ブロック(繰り返し処理)
    var blocks = new Array();
    for(var i=0; i< 2000; i++){ 
        // ブロック
        var block = new ExSprite(8, 8);
        block.image = core.assets["images/cf307/block8p.png"];        
        block.x = 0  + ((i % 40) * 8);
        block.y = 0 + (Math.floor(i / 40) * 8);
        blockGroup.addChild(block);
        block.tag = "b";// タグをつけます 
        blocks.push(block);   //見よう見真似 
    } 
    // 当たり判定をつけます
    for(var i=0; i<blocks.length; i++){
       tama.addCollision(blocks[i]);
    }
    // 当たり判定
    tama.addCollision(bar); 
    //tama.addCollision(kabe); 
    tama.addCollision(kabem); 
    tama.addEventListener(Event.COLLISION, function(e) {
            // クリア
            if(2000 <= score){
                tama.remove();
                var label6 = new Label("?! アンビリーバボー!!!!");
                label6.x = 60;
                label6.y = 480 / 2 - 32 / 2 + 48;
                label6.color = "white";
                label6.font = "24px 'PixelMplus10'";
                scene.addChild(label6);
                var sound100 = core.assets["sounds/cf307/rabohyuuu.mp3"].clone();
                sound100.play();
                var clear = new ExSprite(230, 32);
                clear.image = core.assets["images/gameclear.png"];
                scene.addChild(clear);
                clear.x = 320 / 2 - clear.width / 2;
                clear.y = 480 / 2  - clear.height;
                clear.scale(0.5, 0.5);
                clear.tl.scaleTo(1.4, 1.4, 4);
                clear.tl.scaleTo(1.2, 1.2, 4);   
                // 秘密のボタン
                clear.tl.then(function(){
                var retry = new ExSprite(62, 55);
                retry.image = core.assets["images/b_blue.png"];
                scene.addChild(retry);
                retry.x = 320 / 2 - retry.width / 2;
                retry.y = 300 ;
                retry.tl.moveBy(0, 50, 20);
                // ボタンをタッチ
               retry.addEventListener(Event.TOUCH_START, function(){
                    retry.frame = 1; 
                    console.log("タッチしました");
               });  
               retry.addEventListener(Event.TOUCH_END, function(){
                   retry.frame = 0;
                   gameStart1();
               });
              var label = new Label("!?");
              label.color = 'red';
               label.font = "25px 'PixelMplus10'";
               //label.textAlign = "center";
               label.x = 135;             
               label.y = 360 + 55;
               scene.addChild(label);    
            }); 
        }                          
        // ブロックに当たったら
        if(e.collision.target.tag == "b"){
        // クリア
            if(1999 <= score){
                tama.remove();
                var label6 = new Label("?! アンビリーバボー!!!!");
                label6.x = 60;
                label6.y = 480 / 2 - 32 / 2 + 48;
                label6.color = "white";
                label6.font = "24px 'PixelMplus10'";
                scene.addChild(label6);
                var sound100 = core.assets["sounds/cf307/rabohyuuu.mp3"].clone();
                sound100.play();
                var clear = new ExSprite(230, 32);
                clear.image = core.assets["images/gameclear.png"];
                scene.addChild(clear);
                clear.x = 320 / 2 - clear.width / 2;
                clear.y = 480 / 2  - clear.height;
                clear.scale(0.5, 0.5);
                clear.tl.scaleTo(1.4, 1.4, 4);
                clear.tl.scaleTo(1.2, 1.2, 4);   
                // 秘密のボタン
           clear.tl.then(function(){
                var retry = new ExSprite(62, 55);
                retry.image = core.assets["images/b_blue.png"];
                scene.addChild(retry);
                retry.x = 320 / 2 - retry.width / 2;
                retry.y = 300 ;
                retry.tl.moveBy(0, 50, 20);
                // ボタンをタッチ
               retry.addEventListener(Event.TOUCH_START, function(){
                    retry.frame = 1; 
                    console.log("タッチしました");
                });
                retry.addEventListener(Event.TOUCH_END, function(){
                    retry.frame = 0;
                    gameStart1();
                });
                var label = new Label("!?");
                label.color = 'red';
                label.font = "25px 'PixelMplus10'";
                //label.textAlign = "center";
                label.x = 135;             
                label.y = 360 + 55;
                scene.addChild(label);  
            }); 
        }
            e.collision.target.tl.then(function() {
                e.collision.target.remove();// 消します 
           var bomb = new ExSprite(32, 32);
                bomb.image = core.assets["images/bomb.png"];
                bomb.x = e.collision.target.x;
                bomb.y = e.collision.target.y;
                scene.addChild(bomb); 
                bomb.scale(0.5, 0.5);
                bomb.frame = [0, 1, 2, 3, 4, null];
                //score += 2;// テスト用
                score += 1; 
                var sound = core.assets["sounds/cf307/hit04.mp3"].clone();
                sound.play();        
            }); 
        }
        // バーに当たったら
        if(e.collision.target.tag == "bar"){
            tama.tl.clear();                             
            // 玉の動きのパターン
        var p1 = getRandom(1, 3);
         // (1)最初に正面に当たる
            if(p1 == 1){
                var x1 = getRandom(0, 320 - 9); 
                tama.tl.moveTo(x1, -9, 32, enchant.Easing.SINE_EASEOUT);
                tama.tl.then(function(){
                    var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                    sound.play();
                });
                // 正面に当たった後
                var p2 = getRandom(1, 3);
         // (1)-1そのまま戻る
                if(p2 == 1){
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                } 
         // (1)-2左の壁に当たってから戻る
         if(p2 == 2){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(0, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                }
                // (1)-3右の壁に当たってから戻る
                if(p2 == 3){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(320 - 5, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                }
            } 
            // (2)最初に左の壁に当たる
            if(p1 == 2){
                var y1 = getRandom(200, 400);
                tama.tl.moveTo(0, y1, 16, enchant.Easing.SINE_EASEOUT); 
                tama.tl.then(function(){
                    var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                    sound.play();
                });
                var x1 = getRandom(0, 320 - 9); 
                tama.tl.moveTo(x1, -9, 20, enchant.Easing.SINE_EASEOUT);
                tama.tl.then(function(){
                    var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                    sound.play();
                });
                // 正面に当たった後
                var p2 = getRandom(1, 3);
          // (2)-1そのまま戻る
                if(p2 == 1){
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                } 
         // (2)-2左の壁に当たってから戻る
          if(p2 == 2){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(0, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });                    
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                }
                // (2)-3右の壁に当たってから戻る
                if(p2 == 3){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(320 - 5, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                }
            }
            // (3)最初に右の壁に当たる
            if(p1 == 3){
                var y1 = getRandom(200, 400);
                tama.tl.moveTo(320 - 5, y1, 16, enchant.Easing.SINE_EASEOUT);
                tama.tl.then(function(){
                    var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                    sound.play();
                });
                var x1 = getRandom(0, 320 - 5); 
                tama.tl.moveTo(x1, -9, 16, enchant.Easing.SINE_EASEOUT);
          tama.tl.then(function(){
                    var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                    sound.play();
                });
                // 正面に当たった後
                var p2 = getRandom(1, 3);
          // (3)-1そのまま戻る
                if(p2 == 1){
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                } 
         // (3)-2左の壁に当たってから戻る
          if(p2 == 2){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(0, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });                    
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                }
                // (3)-3右の壁に当たってから戻る
                if(p2 == 3){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(320 - 5, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                }
            }
            // 音
            var sound2 = core.assets["sounds/cf307/decision3.mp3"].clone();
            sound2.play();       
            //tama.tl.moveTo(160, 471, 16); //テスト用
            //score += 2000; //テスト用
        } 
    });   
   
    // 画面をタップしてバーを動かす
    scene.addEventListener(Event.TOUCH_START, function(e){
        console.log("タッチ");
        console.log(e.x);
        bar.tl.moveTo(e.x - 32, 480 - 32, 3, enchant.Easing.QUART_EASEINOUT);
    });
    // ゲームオーバー
    ground.addCollision(tama);    
    ground.addEventListener(Event.COLLISION, function(e) {
        tama.remove();
        var over = new ExSprite(230, 32);
        over.image = core.assets["images/gameover.png"];
        scene.addChild(over);
        over.x = 320 / 2 - over.width / 2;
        over.y = 480 / 2  - over.height + 16;
        over.scale(0.5, 0.5);
        over.tl.scaleTo(1, 1, 8);
        var sound = core.assets["sounds/cf307/ME014-090610-loss02-wav.mp3"].clone();
        sound.play();
        over.tl.then(function() {
            var label = new Label("  TAP TO RETRY");
           label.color = 'red';
            label.font = "28px 'PixelMplus10'";
            label.textAlign = "center";
            label.y = 220 + 100;
            scene.addChild(label); 
            scene.addEventListener(Event.TOUCH_START, function() {
                gameStart();
            });                                                      
        });        
    });  
                                                                                        
    //==========
    // ここまで
    //==========
}
function gameStart1(){// サービスゲーム画面
    scene = gameManager.createGameScene();
    core.replaceScene(scene); core.resume();
    //==========
    // ここから
    //==========
    scene.backgroundColor = "darkgray";
    
    // 背景
    var sky = new ExSprite(320, 480);
    sky.image = core.assets["images/back_space.png"];
    scene.addChild(sky);
    // 地面
    var ground = new ExSprite(320, 55);
    ground.image = core.assets["images/cf307/blueground.png"];
    ground.x = 0;
    ground.y = 480; 
    scene.addChild(ground);
     // 壁左
    var kabe = new ExSprite(10, 480);
    kabe.image = core.assets["images/cf307/10_480.png"]; 
    kabe.x = -10;
    kabe.y = 0;
    scene.addChild(kabe); 
    kabe.tag = "kabe";
     // 壁右
    var kabem = new ExSprite(10, 480);
    kabem.image = core.assets["images/cf307/10_480.png"]; 
    kabem.x = 320;
    kabem.y = 0;
    scene.addChild(kabem); 
    kabem.tag = "kabem";
    // バー
    var bar = new ExSprite(64, 6);
    bar.image = core.assets["images/cf307/baayoko64.png"];
    scene.addChild(bar);
    bar.x = 320 / 2 - 32;
    bar.y = 480 - 32;
    bar.tag = "bar";
    bar.scale(10, 1);// テスト用
    // 玉グループ
     var tamaGroup = new Group();
    scene.addChild(tamaGroup);         
    // 玉
    var tama = new ExSprite(9, 9);
    tama.image = core.assets["images/xe_bullet_r.png"];
    //scene.addChild(tama);
    tama.x = bar.x + bar.width / 2 - tama.width / 2;
    tama.y = bar.y - tama.height;
    tamaGroup.addChild(tama);
    tama.originX = 0;
    tama.originY = 0;
    tama.scale(2, 2);  
    // 最初の音
  var sound0 = core.assets["sounds/cf307/decision3.mp3"].clone();
    sound0.play();   
    // 玉の動き
    var x1 = getRandom(0, 320 - 5);
    //var x1 = getRandom(-320, 0);// テスト用
    tama.tl.moveTo(x1, -9, 32, enchant.Easing.SINE_EASEOUT); 
    // 最初に跳ね返る音
    tama.tl.then(function(){
        var sound1 = core.assets["sounds/cf307/decision1.mp3"].clone();
        sound1.play();    
    });
    var x2 = getRandom(0, 320 - 5);
    tama.tl.moveTo(x2, 480, 32, enchant.Easing.SINE_EASEOUT); 
    // ブロックグループ
    var blockGroup = new Group();
    scene.addChild(blockGroup);
    // スコア表示
    var score = 0;
    scoreLabel = new Label('SCORE : 0');
    scene.addChild(scoreLabel);
    scoreLabel.x = 10;
    scoreLabel.y = 10;
    scoreLabel.color = 'white';
    scoreLabel.font = "24px 'PixelMplus10'";
    scoreLabel.addEventListener(Event.ENTER_FRAME, function() {
        scoreLabel.text = 'SCORE : ' + score;
    });
    
    // ブロック(繰り返し処理)
    var blocks = new Array();
    for(var i=0; i< 2000; i++){ 
        // ブロック
        var block = new ExSprite(8, 8);
        block.image = core.assets["images/cf307/block8p.png"];        
        block.x = 0  + ((i % 40) * 8);
        block.y = 0 + (Math.floor(i / 40) * 8);
        blockGroup.addChild(block);
        block.tag = "b";// タグをつけます 
        blocks.push(block);   //見よう見真似 
    } 
    // 当たり判定をつけます
    for(var i=0; i<blocks.length; i++){
       tama.addCollision(blocks[i]);
    }
    // 当たり判定
    tama.addCollision(bar); 
    //tama.addCollision(kabe); 
    tama.addCollision(kabem); 
    tama.addEventListener(Event.COLLISION, function(e) {
            // クリア
            if(2000 <= score){
                tama.remove();
                var label6 = new Label("?! アンビリーバボー!!!!");
                label6.x = 60;
                label6.y = 480 / 2 - 32 / 2 + 48;
                label6.color = "white";
                label6.font = "24px 'PixelMplus10'";
                scene.addChild(label6);
                var sound100 = core.assets["sounds/cf307/rabohyuuu.mp3"].clone();
                sound100.play();
                var clear = new ExSprite(230, 32);
                clear.image = core.assets["images/gameclear.png"];
                scene.addChild(clear);
                clear.x = 320 / 2 - clear.width / 2;
                clear.y = 480 / 2  - clear.height;
                clear.scale(0.5, 0.5);
                clear.tl.scaleTo(1.4, 1.4, 4);
                clear.tl.scaleTo(1.2, 1.2, 4);  
        var label = new Label("  TAP TO RETRY");
           label.color = 'red';
            label.font = "28px 'PixelMplus10'";
            label.textAlign = "center";
            label.y = 400;
            scene.addChild(label); 
            scene.addEventListener(Event.TOUCH_START, function() {
                gameStart();    
            });
            }                          
        // ブロックに当たったら
        if(e.collision.target.tag == "b"){
            e.collision.target.tl.then(function() {
                e.collision.target.remove();// 消します 
         var bomb = new ExSprite(32, 32);
                bomb.image = core.assets["images/bomb.png"];
                bomb.x = e.collision.target.x;
                bomb.y = e.collision.target.y;
                scene.addChild(bomb); 
                bomb.scale(0.5, 0.5);
                bomb.frame = [0, 1, 2, 3, 4, null];
                //score += 2;// テスト用
                score += 1; 
                var sound = core.assets["sounds/cf307/hit04.mp3"].clone();
                sound.play();        
            }); 
            // クリア
            if(1999 <= score){
                tama.remove();
                var label6 = new Label("?! アンビリーバボー!!!!");
                label6.x = 60;
                label6.y = 480 / 2 - 32 / 2 + 48;
                label6.color = "white";
                label6.font = "24px 'PixelMplus10'";
                scene.addChild(label6);
                var sound100 = core.assets["sounds/cf307/rabohyuuu.mp3"].clone();
                sound100.play();
                var clear = new ExSprite(230, 32);
                clear.image = core.assets["images/gameclear.png"];
                scene.addChild(clear);
                clear.x = 320 / 2 - clear.width / 2;
                clear.y = 480 / 2  - clear.height;
                clear.scale(0.5, 0.5);
                clear.tl.scaleTo(1.4, 1.4, 4);
                clear.tl.scaleTo(1.2, 1.2, 4);  
        var label = new Label("  TAP TO RETRY");
           label.color = 'red';
            label.font = "28px 'PixelMplus10'";
            label.textAlign = "center";
            label.y = 400;
            scene.addChild(label); 
            scene.addEventListener(Event.TOUCH_START, function() {
                gameStart();    
            });
            }                       
        }
        // バーに当たったら
        if(e.collision.target.tag == "bar"){
            tama.tl.clear();
                               
            // 玉の動きのパターン
       var p1 = getRandom(1, 3);
        // (1)最初に正面に当たる
            if(p1 == 1){
                var x1 = getRandom(0, 320 - 9); 
                tama.tl.moveTo(x1, -9, 32, enchant.Easing.SINE_EASEOUT);
                tama.tl.then(function(){
                    var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                    sound.play();
                });
                // 正面に当たった後
                var p2 = getRandom(1, 3);
         // (1)-1そのまま戻る
                if(p2 == 1){
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                } 
         // (1)-2左の壁に当たってから戻る
         if(p2 == 2){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(0, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                }
                // (1)-3右の壁に当たってから戻る
                if(p2 == 3){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(320 - 5, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                }
            } 
            // (2)最初に左の壁に当たる
            if(p1 == 2){
                var y1 = getRandom(200, 400);
                tama.tl.moveTo(0, y1, 16, enchant.Easing.SINE_EASEOUT); 
                tama.tl.then(function(){
                    var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                    sound.play();
                });
                var x1 = getRandom(0, 320 - 9); 
                tama.tl.moveTo(x1, -9, 20, enchant.Easing.SINE_EASEOUT);
                tama.tl.then(function(){
                    var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                    sound.play();
                });
                // 正面に当たった後
                var p2 = getRandom(1, 3);
          // (2)-1そのまま戻る
                if(p2 == 1){
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                } 
         // (2)-2左の壁に当たってから戻る
          if(p2 == 2){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(0, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });                    
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                }
                // (2)-3右の壁に当たってから戻る
                if(p2 == 3){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(320 - 5, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                }
            }
            // (3)最初に右の壁に当たる
            if(p1 == 3){
                var y1 = getRandom(200, 400);
                tama.tl.moveTo(320 - 5, y1, 16, enchant.Easing.SINE_EASEOUT);
                tama.tl.then(function(){
                    var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                    sound.play();
                });
                var x1 = getRandom(0, 320 - 5); 
                tama.tl.moveTo(x1, -9, 16, enchant.Easing.SINE_EASEOUT);
          tama.tl.then(function(){
                    var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                    sound.play();
                });
                // 正面に当たった後
                var p2 = getRandom(1, 3);
          // (3)-1そのまま戻る
                if(p2 == 1){
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                } 
         // (3)-2左の壁に当たってから戻る
          if(p2 == 2){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(0, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });                    
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                }
                // (3)-3右の壁に当たってから戻る
                if(p2 == 3){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(320 - 5, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                }
            }
            // 音
            var sound2 = core.assets["sounds/cf307/decision3.mp3"].clone();
            sound2.play();       
            //tama.tl.moveTo(160, 471, 16); //テスト用
            //score += 500; //テスト用
        } 
    });   
   
    // 画面をタップしてバーを動かす
    scene.addEventListener(Event.TOUCH_START, function(e){
        console.log("タッチ");
        console.log(e.x);
        bar.tl.moveTo(e.x - 32, 480 - 32, 3, enchant.Easing.QUART_EASEINOUT);
    });
    // ゲームオーバー
    ground.addCollision(tama);    
    ground.addEventListener(Event.COLLISION, function(e) {
        tama.remove();
        var over = new ExSprite(230, 32);
        over.image = core.assets["images/gameover.png"];
        scene.addChild(over);
        over.x = 320 / 2 - over.width / 2;
        over.y = 480 / 2  - over.height + 16;
        over.scale(0.5, 0.5);
        over.tl.scaleTo(1, 1, 8);
        var sound = core.assets["sounds/cf307/ME014-090610-loss02-wav.mp3"].clone();
        sound.play();
        over.tl.then(function() {
            var label = new Label("  TAP TO RETRY");
           label.color = 'red';
            label.font = "28px 'PixelMplus10'";
            label.textAlign = "center";
            label.y = 220 + 100;
            scene.addChild(label); 
            scene.addEventListener(Event.TOUCH_START, function() {
                gameStart();
            });                                                      
        });        
    });                                                                                          
    //==========
    // ここまで
    //==========
}
function getRandom(start, end) {
    return start + Math.floor( Math.random() * (end - start + 1));
}
function titleStart(){// タイトル画面
    var scene = gameManager.createTitleScene();
    core.replaceScene(scene); core.pause();
    scene.on(enchant.Event.TOUCH_START, function(){gameStart();});
}
//==========
// EnchantJS
enchant();
var gameManager;
var core;
var scene;
window.onload = function(){
    gameManager = new common.GameManager();
    core = gameManager.createCore(320, 480);
    core.preload(assets);
    core.onload = function(){titleStart();};
    core.start();
}

激重の極み(空想芸~

前回1200個だったものを、画面の限界まで増やして、2000個にしたので、”極み”です。

macでは軽くて問題ありませんでしたが古いWindowsでは怪しい動きになりました。

全部消すと、?! アンビリーバボー!!!!と表示されます。

// Main
console.log("Hello EnchantJS!!");
var assets = [
    "images/back_space.png",    
    "images/kati_tanuki.png",
    "images/title.png",// タイトル
    "sounds/coin.mp3",
    "sounds/jump.mp3",
    "images/cf307/baayoko64.png",
    "images/xe_bullet_r.png",
    "images/gameover.png", 
    "images/cf307/blueground.png",
    "sounds/cf307/decision1.mp3",
    "sounds/cf307/decision3.mp3",
    "sounds/cf307/rabohyuuu.mp3",
    "images/gameclear.png",
    "sounds/cf307/trumpet-dub1.mp3",
    "sounds/cf307/boyoyon1.mp3",
    "sounds/cf307/trumpet1.mp3",
    "sounds/cf307/dondonpafupafu1.mp3",
    "images/block_d.png", 
    "images/cf307/block8p.png", 
    "sounds/cf307/ME014-090610-loss02-wav.mp3",
    "sounds/cf307/hit04.mp3",  
    "images/cf307/10_480.png", 
    "images/bomb.png",  
];
function gameStart(){// ゲーム画面
    scene = gameManager.createGameScene();
    core.replaceScene(scene); core.resume();

    //==========
    // ここから
    //==========

    scene.backgroundColor = "darkgray";
    
    // 背景
    var sky = new ExSprite(320, 480);
    sky.image = core.assets["images/back_space.png"];
    scene.addChild(sky);

    // 地面
    var ground = new ExSprite(320, 55);
    ground.image = core.assets["images/cf307/blueground.png"];
    ground.x = 0;
    ground.y = 480; 
    scene.addChild(ground);

   // 壁左
    var kabe = new ExSprite(10, 480);
    kabe.image = core.assets["images/cf307/10_480.png"]; 
    kabe.x = -10;
    kabe.y = 0;
    scene.addChild(kabe); 
    kabe.tag = "kabe";

   // 壁右
    var kabem = new ExSprite(10, 480);
    kabem.image = core.assets["images/cf307/10_480.png"]; 
    kabem.x = 320;
    kabem.y = 0;
    scene.addChild(kabem); 
    kabem.tag = "kabem";

    // バー
    var bar = new ExSprite(64, 6);
    bar.image = core.assets["images/cf307/baayoko64.png"];
    scene.addChild(bar);
    bar.x = 320 / 2 - 32;
    bar.y = 480 - 32;
    bar.tag = "bar";
    //bar.scale(10, 1);//テスト

    // 玉グループ
   var tamaGroup = new Group();
    scene.addChild(tamaGroup);    
     
    // 玉
    var tama = new ExSprite(9, 9);
    tama.image = core.assets["images/xe_bullet_r.png"];
    //scene.addChild(tama);
    tama.x = bar.x + bar.width / 2 - tama.width / 2;
    tama.y = bar.y - tama.height;
    tamaGroup.addChild(tama);
    tama.originX = 0;
    tama.originY = 0;
    tama.scale(0.6, 0.6);
  
    // 最初の音
    var sound0 = core.assets["sounds/cf307/decision3.mp3"].clone();
    sound0.play(); 
  
    // 玉の動き
    var x1 = getRandom(0, 320 - 5);
    //var x1 = getRandom(-320, 0);// テスト用
    tama.tl.moveTo(x1, -9, 32, enchant.Easing.SINE_EASEOUT); 
    // 最初に跳ね返る音
    tama.tl.then(function(){
        var sound1 = core.assets["sounds/cf307/decision1.mp3"].clone();
        sound1.play();    
    });
    var x2 = getRandom(0, 320 - 5);
    tama.tl.moveTo(x2, 480, 32, enchant.Easing.SINE_EASEOUT); 

    // ブロックグループ
    var blockGroup = new Group();
    scene.addChild(blockGroup);

    // スコア表示
    var score = 0;
    scoreLabel = new Label('SCORE : 0');
    scene.addChild(scoreLabel);
    scoreLabel.x = 10;
    scoreLabel.y = 10;
    scoreLabel.color = 'white';
    scoreLabel.font = "24px 'PixelMplus10'";
    scoreLabel.addEventListener(Event.ENTER_FRAME, function() {
        scoreLabel.text = 'SCORE : ' + score;
    });
    
    // ブロック(繰り返し処理)
    var blocks = new Array();
    for(var i=0; i< 2000; i++){ 
        // ブロック
        var block = new ExSprite(8, 8);
        block.image = core.assets["images/cf307/block8p.png"];        
        block.x = 0  + ((i % 40) * 8);
        block.y = 0 + (Math.floor(i / 40) * 8);
        blockGroup.addChild(block);
        block.tag = "b";// タグをつけます 
        blocks.push(block);   
    } 
    // 当たり判定をつけます
    for(var i=0; i<blocks.length; i++){
       tama.addCollision(blocks[i]);
    }
    // 当たり判定
    tama.addCollision(bar); 
    //tama.addCollision(kabe); 
    tama.addCollision(kabem); 
    tama.addEventListener(Event.COLLISION, function(e) {
        // クリア
        if(2000 <= score){
            tama.remove();
            var label6 = new Label("?! アンビリーバボー!!!!");
            label6.x = 60;
            label6.y = 480 / 2 - 16 / 2 + 48;
            label6.color = "white";
            label6.font = "24px 'PixelMplus10'";
            scene.addChild(label6);
            var sound100 = core.assets["sounds/cf307/rabohyuuu.mp3"].clone();
            sound100.play();
            var clear = new ExSprite(230, 32);
            clear.image = core.assets["images/gameclear.png"];
            scene.addChild(clear);
            clear.x = 320 / 2 - clear.width / 2;
            clear.y = 480 / 2  - clear.height;
            clear.scale(0.5, 0.5);
            clear.tl.scaleTo(1.4, 1.4, 4);
            clear.tl.scaleTo(1.2, 1.2, 4);      
         }    
        // ブロックに当たったら
        if(e.collision.target.tag == "b"){
            e.collision.target.tl.then(function() {
                e.collision.target.remove();// 消します 
         var bomb = new ExSprite(32, 32);
                bomb.image = core.assets["images/bomb.png"];
                bomb.x = e.collision.target.x;
                bomb.y = e.collision.target.y;
                scene.addChild(bomb); 
                bomb.scale(0.5, 0.5);
                bomb.frame = [0, 1, 2, 3, 4, null]
                score += 1; 
                var sound = core.assets["sounds/cf307/hit04.mp3"].clone();
                sound.play();        
            });
        // クリア
        if(1999 <= score){
            tama.remove();
            var label6 = new Label("?! アンビリーバボー!!!!");
            label6.x = 60;
            label6.y = 480 / 2 - 16 / 2 + 48;
            label6.color = "white";
            label6.font = "24px 'PixelMplus10'";
            scene.addChild(label6);
            var sound100 = core.assets["sounds/cf307/rabohyuuu.mp3"].clone();
            sound100.play();
            var clear = new ExSprite(230, 32);
            clear.image = core.assets["images/gameclear.png"];
            scene.addChild(clear);
            clear.x = 320 / 2 - clear.width / 2;
            clear.y = 480 / 2  - clear.height;
            clear.scale(0.5, 0.5);
            clear.tl.scaleTo(1.4, 1.4, 4);
            clear.tl.scaleTo(1.2, 1.2, 4);      
         }    
        }
        // バーに当たったら
        if(e.collision.target.tag == "bar"){
            tama.tl.clear();
            // 玉の動きのパターン
       var p1 = getRandom(1, 3);
        // (1)最初に正面に当たる
            if(p1 == 1){
                var x1 = getRandom(0, 320 - 9); 
                tama.tl.moveTo(x1, -9, 32, enchant.Easing.SINE_EASEOUT);
                tama.tl.then(function(){
                    var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                    sound.play();
                });
                // 正面に当たった後
                var p2 = getRandom(1, 3);
         // (1)-1そのまま戻る
                if(p2 == 1){
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                } 
         // (1)-2左の壁に当たってから戻る
         if(p2 == 2){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(0, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 30, enchant.Easing.SINE_EASEOUT);
                }
                // (1)-3右の壁に当たってから戻る
                if(p2 == 3){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(320 - 5, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 30, enchant.Easing.SINE_EASEOUT);
                }
            } 
            // (2)最初に左の壁に当たる
            if(p1 == 2){
                var y1 = getRandom(200, 400);
                tama.tl.moveTo(0, y1, 16, enchant.Easing.SINE_EASEOUT); 
                tama.tl.then(function(){
                    var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                    sound.play();
                });
                var x1 = getRandom(0, 320 - 9); 
                tama.tl.moveTo(x1, -9, 20, enchant.Easing.SINE_EASEOUT);
                tama.tl.then(function(){
                    var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                    sound.play();
                });
                // 正面に当たった後
                var p2 = getRandom(1, 3);
          // (2)-1そのまま戻る
                if(p2 == 1){
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                } 
         // (2)-2左の壁に当たってから戻る
          if(p2 == 2){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(0, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });                    
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 30, enchant.Easing.SINE_EASEOUT);
                }
                // (2)-3右の壁に当たってから戻る
                if(p2 == 3){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(320 - 5, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 30, enchant.Easing.SINE_EASEOUT);
                }
            }
            // (3)最初に右の壁に当たる
            if(p1 == 3){
                var y1 = getRandom(200, 400);
                tama.tl.moveTo(320 - 5, y1, 16, enchant.Easing.SINE_EASEOUT);
                tama.tl.then(function(){
                    var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                    sound.play();
                });
                var x1 = getRandom(0, 320 - 5); 
                tama.tl.moveTo(x1, -9, 16, enchant.Easing.SINE_EASEOUT);
          tama.tl.then(function(){
                    var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                    sound.play();
                });
                // 正面に当たった後
                var p2 = getRandom(1, 3);
          // (3)-1そのまま戻る
                if(p2 == 1){
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 32, enchant.Easing.SINE_EASEOUT);
                } 
         // (3)-2左の壁に当たってから戻る
          if(p2 == 2){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(0, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });                    
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 30, enchant.Easing.SINE_EASEOUT);
                }
                // (3)-3右の壁に当たってから戻る
                if(p2 == 3){
                    var y1 = getRandom(0, 200);
                    tama.tl.moveTo(320 - 5, y1, 16, enchant.Easing.SINE_EASEOUT);
                    tama.tl.then(function(){
                        var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                        sound.play();
                    });
                    var x2 = getRandom(0, 320 - 5); 
                    tama.tl.moveTo(x2, 480 - 5, 30, enchant.Easing.SINE_EASEOUT);
                }
            }
            // 音
            var sound2 = core.assets["sounds/cf307/decision3.mp3"].clone();
            sound2.play();       
            //tama.tl.moveTo(160, 471, 16); //テスト用
            //score += 500; //テスト用
        } 
    });   
   
    // 画面をタップしてバーを動かす
    scene.addEventListener(Event.TOUCH_START, function(e){
        console.log("タッチ");
        console.log(e.x);
        bar.tl.moveTo(e.x - 32, 480 - 32, 3, enchant.Easing.QUART_EASEINOUT);
    });
    // ゲームオーバー
    ground.addCollision(tama);    
    ground.addEventListener(Event.COLLISION, function(e) {
        tama.remove();
        var over = new ExSprite(230, 32);
        over.image = core.assets["images/gameover.png"];
        scene.addChild(over);
        over.x = 320 / 2 - over.width / 2;
        over.y = 480 / 2  - over.height + 16;
        over.scale(0.5, 0.5);
        over.tl.scaleTo(1, 1, 8);
        var sound = core.assets["sounds/cf307/ME014-090610-loss02-wav.mp3"].clone();
        sound.play();
        over.tl.then(function() {
            var label = new Label("  TAP TO RETRY");
           label.color = 'red';
            label.font = "28px 'PixelMplus10'";
            label.textAlign = "center";
            label.y = 220 + 100;
            scene.addChild(label); 
            scene.addEventListener(Event.TOUCH_START, function() {
                gameStart();
            });                                                      
        });                
    }); 
                                                                                         
    //==========
    // ここまで
    //==========
}
function getRandom(start, end) {
    return start + Math.floor( Math.random() * (end - start + 1));
}
function titleStart(){// タイトル画面
    var scene = gameManager.createTitleScene();
    core.replaceScene(scene); core.pause();
    scene.on(enchant.Event.TOUCH_START, function(){gameStart();});
}

//==========
// EnchantJS
enchant();
var gameManager;
var core;
var scene;
window.onload = function(){
    gameManager = new common.GameManager();
    core = gameManager.createCore(320, 480);
    core.preload(assets);
    core.onload = function(){titleStart();};
    core.start();
}

ブロック崩し激重(空想芸~(解説)

前回、先生のサンプルコードから、配列を使った当たり判定を知ったので、それをつかってブロックくずしのようなものを作ってみました。

ブロックは1200個です。通常のブロック崩しのように跳ね返らず、貫通するので、多くしてみました。どれくらい多くできるのかなとやってみたら、Windowsでは重くなってしましました。

スコアによってだんだん弾のスピードを上げていこうとしましたが、速くすると、タイミングによってはバーをすりぬけてしまうので、断念しました。動くものどうしの衝突判定は色々難しいようです。

クリアすると、「?! 全部消したの?!      想定外です‥」と表示されます。

// Main
console.log("Hello EnchantJS!!");

var assets = [
 "images/back_space.png", 
 "images/kati_tanuki.png",
 "images/title.png",// タイトル
 "sounds/coin.mp3",
 "sounds/jump.mp3",
 "images/cf307/baayoko64.png",
 "images/xe_bullet_r.png",
 "images/gameover.png", 
 "images/cf307/blueground.png",
 "sounds/cf307/decision1.mp3",
 "sounds/cf307/decision3.mp3",
 "sounds/cf307/rabohyuuu.mp3",
 "images/gameclear.png",
 "sounds/cf307/trumpet-dub1.mp3",
 "sounds/cf307/boyoyon1.mp3",
 "sounds/cf307/trumpet1.mp3",
 "sounds/cf307/dondonpafupafu1.mp3",
 "images/block_d.png", 
 "images/cf307/block8p.png", 
 "sounds/cf307/ME014-090610-loss02-wav.mp3",
 "sounds/cf307/hit04.mp3",  
 "images/cf307/10_480.png",   
];

function gameStart(){// ゲーム画面
 scene = gameManager.createGameScene();
 core.replaceScene(scene); core.resume();

//==========
// ここから
//==========

scene.backgroundColor = "darkgray";
 
 // 背景
 var sky = new ExSprite(320, 480);
 sky.image = core.assets["images/back_space.png"];
 scene.addChild(sky);

 // 地面
 var ground = new ExSprite(320, 55);
 ground.image = core.assets["images/cf307/blueground.png"];
 ground.x = 0;
 ground.y = 480; 
 scene.addChild(ground);

 // 壁左
 var kabe = new ExSprite(30, 480);
 kabe.image = core.assets["images/cf307/10_480.png"]; 
 kabe.x = -30;
 kabe.y = 0;
 scene.addChild(kabe); 
 kabe.tag = "kabe";

 // 壁右
 var kabem = new ExSprite(30, 480);
 kabem.image = core.assets["images/cf307/10_480.png"]; 
 kabem.x = 320;
 kabem.y = 0;
 scene.addChild(kabem); 
 kabem.tag = "kabem";

 // バー
 var bar = new ExSprite(64, 6);
 bar.image = core.assets["images/cf307/baayoko64.png"];
 scene.addChild(bar);
 bar.x = 320 / 2 - 32;
 bar.y = 480 - 32;
 bar.tag = "bar";
 //bar.scale(10, 0);//テスト用

 // 玉グループ
 var tamaGroup = new Group();
 scene.addChild(tamaGroup);     

 // 玉
 var tama = new ExSprite(9, 9);
 tama.image = core.assets["images/xe_bullet_r.png"];
 //scene.addChild(tama);
 tama.x = bar.x + bar.width / 2 - tama.width / 2;
 tama.y = bar.y - tama.height;
 tamaGroup.addChild(tama);
 tama.originX = 0;
 tama.originY = 0;
 tama.scale(0.6, 0.6);  
 //tama.scale(4, 4);// テスト用

 // 最初の音
 var sound0 = core.assets["sounds/cf307/decision3.mp3"].clone();
 sound0.play(); 
  
 // 玉の動き
 var x1 = getRandom(-320, 640 - tama.width);
 //var x1 = getRandom(-320, 0);// テスト用
 tama.tl.moveTo(x1, -9, 35, enchant.Easing.SINE_EASEOUT); 
 // 最初に跳ね返る音
 tama.tl.then(function(){
     var sound1 = core.assets["sounds/cf307/decision1.mp3"].clone();
     sound1.play(); 
 });
 var x2 = getRandom(0, 320 - tama.width);
 tama.tl.moveTo(x2, 480, 35, enchant.Easing.SINE_EASEOUT);

 // ブロックグループ
 var blockGroup = new Group();
 scene.addChild(blockGroup);

 // スコア表示
 var score = 0;
 scoreLabel = new Label('SCORE : 0');
 scene.addChild(scoreLabel);
 scoreLabel.x = 10;
 scoreLabel.y = 10;
 scoreLabel.color = 'white';
 scoreLabel.font = "24px 'PixelMplus10'";
 scoreLabel.addEventListener(Event.ENTER_FRAME, function() {
     scoreLabel.text = 'SCORE : ' + score;
 });
    
 // ブロック(繰り返し処理)
 var blocks = new Array();
 for(var i=0; i<1200; i++){ 
     // ブロック
     var block = new ExSprite(8, 8);
     block.image = core.assets["images/cf307/block8p.png"]; 
     block.x = 0 + ((i % 40) * 8);
     block.y = 0 + (Math.floor(i / 40) * 8);
     blockGroup.addChild(block);
     block.tag = "b";// タグをつけます 
     blocks.push(block); 
 }

 // 2, 当たり判定をつけます
 for(var i=0; i<blocks.length; i++){
     tama.addCollision(blocks[i]);
 }

 // 当たり判定
 tama.addCollision(bar); 
 tama.addCollision(kabe); 
 tama.addCollision(kabem); 
 tama.addEventListener(Event.COLLISION, function(e) {
     // クリア
     if(1200 <= score){
         tama.remove();
         var label6 = new Label("?! 全部消したの?!      想定外です‥");
         label6.x = 60;
         label6.y = 480 / 2 - 16 / 2 + 48;
         label6.color = "white";
         label6.font = "24px 'PixelMplus10'";
         scene.addChild(label6);
         var sound100 = core.assets["sounds/cf307/rabohyuuu.mp3"].clone();
         sound100.play();
         var clear = new ExSprite(230, 32);
         clear.image = core.assets["images/gameclear.png"];
         scene.addChild(clear);
         clear.x = 320 / 2 - clear.width / 2;
         clear.y = 480 / 2 - clear.height;
         clear.scale(0.5, 0.5);
         clear.tl.scaleTo(1.4, 1.4, 4);
         clear.tl.scaleTo(1.2, 1.2, 4);      
     } 
     // 壁にあたったら
     // 壁左
     if(e.collision.target.tag == "kabe"){
         tama.tl.clear();
         var x1 = getRandom(100, 320 - tama.width);
         tama.tl.moveTo(x1, -9, 17, enchant.Easing.SINE_EASEOUT);
         tama.tl.then(function(){
             var sound1 = core.assets["sounds/cf307/decision1.mp3"].clone();
             sound1.play(); 
         });
         var x2 = getRandom(0, 320 - tama.width);
         tama.tl.moveTo(x2, 480, 35, enchant.Easing.SINE_EASEOUT); 
     } 
     // 壁右
     if(e.collision.target.tag == "kabem"){
         console.log("kabem");
         tama.tl.clear();
         var x1 = getRandom(0, 220);
         tama.tl.moveTo(x1, -9, 17, enchant.Easing.SINE_EASEOUT);
         tama.tl.then(function(){
             var sound1 = core.assets["sounds/cf307/decision1.mp3"].clone();
             sound1.play(); 
         });
         var x2 = getRandom(0, 320 - tama.width);
         tama.tl.moveTo(x2, 480, 35, enchant.Easing.SINE_EASEOUT); 
     } 
     // ブロックに当たったら
     if(e.collision.target.tag == "b"){
         e.collision.target.tl.then(function() {
             e.collision.target.remove();// 消します 
             score += 1;
             //score += 100; // テスト 
             var sound = core.assets["sounds/cf307/hit04.mp3"].clone();
             sound.play(); 
         });
         if(1199 <= score){
             tama.remove();
             var label6 = new Label("?! 全部消したの?!      想定外です‥");
             label6.x = 60;
             label6.y = 480 / 2 - 16 / 2 + 48;
             label6.color = "white";
             label6.font = "24px 'PixelMplus10'";
             scene.addChild(label6);
             var sound100 = core.assets["sounds/cf307/rabohyuuu.mp3"].clone();
             sound100.play();
             var clear = new ExSprite(230, 32);
             clear.image = core.assets["images/gameclear.png"];
             scene.addChild(clear);
             clear.x = 320 / 2 - clear.width / 2;
             clear.y = 480 / 2 - clear.height;
             clear.scale(0.5, 0.5);
             clear.tl.scaleTo(1.4, 1.4, 4);
             clear.tl.scaleTo(1.2, 1.2, 4);      
         } 
     }
     // バーに当たったら
     if(e.collision.target.tag == "bar"){
         tama.tl.clear();
         var x1 = getRandom(-320, 640 - tama.width);
         tama.tl.moveTo(x1, -9, 35, enchant.Easing.SINE_EASEOUT);
         tama.tl.then(function(){
             var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
             sound.play(); 
         }); 
         var x2 = getRandom(0, 320 - tama.width);
         tama.tl.moveTo(x2, 480, 35, enchant.Easing.SINE_EASEOUT);
         // 音
         var sound2 = core.assets["sounds/cf307/decision3.mp3"].clone();
         sound2.play();       
         //tama.tl.moveTo(160, 471, 16); //テスト用
         //score += 500; //テスト用
         /* // 球が速くなる
         if(300<= score && score < 600){
             tama.tl.clear();
             var x1 = getRandom(0, 320 - tama.width);
             tama.tl.moveTo(x1, -9, 30, enchant.Easing.SINE_EASEOUT); 
             tama.tl.then(function(){
                 var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                 sound.play(); 
             }); 
             var x2 = getRandom(0, 320 - tama.width);
             tama.tl.moveTo(x2, 480, 30, enchant.Easing.SINE_EASEOUT);
         }
         if(600 <= score && score < 1200){
             tama.tl.clear();
             var x1 = getRandom(0, 320 - tama.width);
             tama.tl.moveTo(x1, -9, 27, enchant.Easing.SINE_EASEOUT); 
             tama.tl.then(function(){
                 var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                 sound.play(); 
             }); 
             var x2 = getRandom(0, 320 - tama.width);
             tama.tl.moveTo(x2, 480, 27, enchant.Easing.SINE_EASEOUT);
         }
         if(900 <= score ){
             tama.tl.clear();
             var x1 = getRandom(0, 320 - tama.width);
             tama.tl.moveTo(x1, -9, 24, enchant.Easing.SINE_EASEOUT); 
             tama.tl.then(function(){
                 var sound = core.assets["sounds/cf307/decision1.mp3"].clone();
                 sound.play(); 
             }); 
             var x2 = getRandom(0, 320 - tama.width);
             tama.tl.moveTo(x2, 480, 24, enchant.Easing.SINE_EASEOUT);
         } 
*/ 
     } 
 }); 
 
 // 画面をタップしてバーを動かす
 scene.addEventListener(Event.TOUCH_START, function(e){
     console.log("タッチ");
     console.log(e.x);
     bar.tl.moveTo(e.x - 32, 480 - 32, 3, enchant.Easing.QUART_EASEINOUT);
 });

 // ゲームオーバー
 ground.addCollision(tama); 
 ground.addEventListener(Event.COLLISION, function(e) {
     tama.remove();
     var over = new ExSprite(230, 32);
     over.image = core.assets["images/gameover.png"];
     scene.addChild(over);
     over.x = 320 / 2 - over.width / 2;
     over.y = 480 / 2 - over.height + 16;
     over.scale(0.5, 0.5);
     over.tl.scaleTo(1, 1, 8);
     var sound = core.assets["sounds/cf307/ME014-090610-loss02-wav.mp3"].clone();
     sound.play();
     over.tl.then(function() {
         var label = new Label(" TAP TO RETRY");
         label.color = 'red';
         label.font = "28px 'PixelMplus10'";
         label.textAlign = "center";
         label.y = 220 + 100;
         scene.addChild(label); 
         scene.addEventListener(Event.TOUCH_START, function() {
             gameStart();
         }); 
     });
 });               

//==========
// ここまで
//==========
}

function getRandom(start, end) {
 return start + Math.floor( Math.random() * (end - start + 1));
}

function titleStart(){// タイトル画面
 var scene = gameManager.createTitleScene();
 core.replaceScene(scene); core.pause();
 scene.on(enchant.Event.TOUCH_START, function(){gameStart();});
}

//==========
// EnchantJS
enchant();
var gameManager;
var core;
var scene;
window.onload = function(){
 gameManager = new common.GameManager();
 core = gameManager.createCore(320, 480);
 core.preload(assets);
 core.onload = function(){titleStart();};
 core.start();
}