🎹ぴあの🎹シンプル(解説)

soundsのところに音があったので、作ってみたものです。

イメージとしては、よくおもちゃコーナーにある、小さな子ども用のおもちゃのピアノです。

工夫したところとしては、鍵盤の絵です。

鍵盤の種類は三種類、

 

 

 

描いてみて、押したときに、左右の枠が少し太くなり、下に長く伸ばすと押した感じに見えることがわかりました。(上図の右側がそれぞれ鍵盤を押したときのframe)

音の長さに合わせて背景の音符が流れるようにして、音が流れている感じを出してみました。

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

var assets = [
    "images/back_mountain.png",
    "images/kati_land.png",
    "images/kati_tanuki.png",
    "images/title.png",// タイトル
    "sounds/coin.mp3",
    "sounds/jump.mp3",
    "images/cf307/kennbanmigi.png",
    "images/cf307/kennbanhidari.png",
    "sounds/piano1_1do.mp3",
    "images/cf307/kennbannaka.png",
    "sounds/piano1_2re.mp3",
    "images/cf307/backonpu1.png",
    "images/cf307/kennbanhidari.png",
    "sounds/piano1_3mi.mp3",
    "sounds/piano1_4fa.mp3",
    "sounds/piano1_5so.mp3",
    "sounds/piano1_6ra.mp3",
    "sounds/piano1_7si.mp3",
    "sounds/piano1_8do.mp3",
];

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

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

    scene.backgroundColor = "#00ffff";
    
    // 背景
    var background1 = new ExSprite(320, 480);
    background1.image = core.assets['images/cf307/backonpu1.png'];
    scene.addChild(background1);
    background1.x = 0;
    background1.y = -480;
    var background2 = new ExSprite(320, 480);
    background2.image = core.assets['images/cf307/backonpu1.png'];
    scene.addChild(background2);
    
    // 
    var kennbanmigi = new ExSprite(40, 104);
    kennbanmigi.image = core.assets["images/cf307/kennbanmigi.png"];
    scene.addChild(kennbanmigi);
    kennbanmigi.x = 0;
    kennbanmigi.y = 480 - 104;
    // タップ
    kennbanmigi.addEventListener(Event.TOUCH_START, function(){
        kennbanmigi.frame = 1;
        var sound = core.assets['sounds/piano1_1do.mp3'].clone();
        sound.play();
    });
    // タップ終了
    kennbanmigi.addEventListener(Event.TOUCH_END, function(){
        kennbanmigi.frame = 0;
    });

    // レ 
    var kennbannaka = new ExSprite(40, 104);
    kennbannaka.image = core.assets["images/cf307/kennbannaka.png"];
    scene.addChild(kennbannaka);
    kennbannaka.x = 40;
    kennbannaka.y = 480 - 104;
    // タップ
    kennbannaka.addEventListener(Event.TOUCH_START, function(){
        kennbannaka.frame = 1;
        var sound = core.assets['sounds/piano1_2re.mp3'].clone();
        sound.play();
    });
    // タップ終了
    kennbannaka.addEventListener(Event.TOUCH_END, function(){
        kennbannaka.frame = 0;
    });

    // ミ 
    var kennbanhidari = new ExSprite(40, 104);
    kennbanhidari.image = core.assets["images/cf307/kennbanhidari.png"];
    scene.addChild(kennbanhidari);
    kennbanhidari.x = 40 + 40;
    kennbanhidari.y = 480 - 104;
    // タップ
    kennbanhidari.addEventListener(Event.TOUCH_START, function(){
        kennbanhidari.frame = 1;
        var sound = core.assets['sounds/piano1_3mi.mp3'].clone();
        sound.play();
    });
    // タップ終了
    kennbanhidari.addEventListener(Event.TOUCH_END, function(){
        kennbanhidari.frame = 0;
    });

    // ファ 
    var fa = new ExSprite(40, 104);
    fa.image = core.assets["images/cf307/kennbanmigi.png"];
    scene.addChild(fa);
    fa.x = 40 + 40 + 40;
    fa.y = 480 - 104;
    // タップ
    fa.addEventListener(Event.TOUCH_START, function(){
        fa.frame = 1;
        var sound = core.assets['sounds/piano1_4fa.mp3'].clone();
        sound.play();
    });
    // タップ終了
    fa.addEventListener(Event.TOUCH_END, function(){
        fa.frame = 0;
    });

    // ソ 
    var so = new ExSprite(40, 104);
    so.image = core.assets["images/cf307/kennbannaka.png"];
    scene.addChild(so);
    so.x = 40 + 40 + 40 + 40;
    so.y = 480 - 104;
    // タップ
    so.addEventListener(Event.TOUCH_START, function(){
        so.frame = 1;
        var sound = core.assets['sounds/piano1_5so.mp3'].clone();
        sound.play();
    });
    // タップ終了
    so.addEventListener(Event.TOUCH_END, function(){
        so.frame = 0;
    });

    // ラ 
    var ra = new ExSprite(40, 104);
    ra.image = core.assets["images/cf307/kennbannaka.png"];
    scene.addChild(ra);
    ra.x = 40 + 40 + 40 + 40 + 40;
    ra.y = 480 - 104;
    // タップ
    ra.addEventListener(Event.TOUCH_START, function(){
        ra.frame = 1;
        var sound = core.assets['sounds/piano1_6ra.mp3'].clone();
        sound.play();
    });
    // タップ終了
    ra.addEventListener(Event.TOUCH_END, function(){
        ra.frame = 0;
    });

    // シ 
    var si = new ExSprite(40, 104);
    si.image = core.assets["images/cf307/kennbanhidari.png"];
    scene.addChild(si);
    si.x = 40 + 40 + 40 + 40 + 40 + 40;
    si.y = 480 - 104;
    // タップ
    si.addEventListener(Event.TOUCH_START, function(){
        si.frame = 1;
        var sound = core.assets['sounds/piano1_7si.mp3'].clone();
        sound.play();
    });
    // タップ終了
    si.addEventListener(Event.TOUCH_END, function(){
        si.frame = 0;
    });

    // ド 
    var do8 = new ExSprite(40, 104);
    do8.image = core.assets["images/cf307/kennbanmigi.png"];
    scene.addChild(do8);
    do8.x = 280;
    do8.y = 480 - 104;
    // タップ
    do8.addEventListener(Event.TOUCH_START, function(){
        do8.frame = 1;
        var sound = core.assets['sounds/piano1_8do.mp3'].clone();
        sound.play();
    });
    // タップ終了
    do8.addEventListener(Event.TOUCH_END, function(){
        do8.frame = 0;
    });
   
    // 画面がタップされたら
    scene.addEventListener(Event.TOUCH_START, function(){
        background1.tl.clear();
        background2.tl.clear();
        console.log("音符よ動け!!");
        background1.tl.moveBy(0, 480 * 24 / 150, 24);
        background2.tl.moveBy(0, 480 * 24 / 150, 24);
        if(background2.y >= 480){
            console.log("スクロールして!!");      
            background2.y = background1.y - 480;
        }
       if(background1.y >= 480){
            background1.y = background2.y - 480;
        }
    });

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

}

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();
}

なでてニャ(解説)

これは、カウンターを設置して、何かをするとカウンターが増えたり減ったりするようにして、カウンターの値によって条件分岐で動きを変えるというものを習ったので、それを使って作ったものです。

念願のねこをなでるゲームをつくることができて、大変満足でした。

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

var assets = [
    "images/back_mountain.png",
    "images/kikori_land.png",
    "images/cf005/cat_run.png",
    "images/kikori_kame_1.png",
    "images/title.png",// タイトル
    "sounds/hit.mp3",
    "sounds/jump.mp3",
    "images/kikori_kame_1.png",
    "images/kati_rock.png",
    "images/cf307/zabton.png",
    "images/cf307/nadenade.png",
    "images/cf307/nekoosuwari.png",
    "images/cf307/nekohako.png",
    "images/cf307/nekonemuri.png",
];

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

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

    scene.backgroundColor = "orange";

    // 座布団
    var zabuton = new ExSprite(70, 70);
    zabuton.image = core.assets["images/cf307/zabton.png"];
    scene.addChild(zabuton);
    zabuton.x = 320 / 2 - 70 / 2;
    zabuton.y = 480 / 2 - 70 / 2;
    zabuton.scale(2, 2);

    // カウンター
    var counter = 0;

    // ラベル
    var label = new Label("x");
    label.x = 160 - 16;
    label.y = 380 - 90;
    label.color = "white";
    label.font = "32px Arial";
    label.text = counter;
    scene.addChild(label);
    
    // ねこちゃん
    var neko = new ExSprite(64, 64);
    neko.image = core.assets["images/cf005/cat_run.png"];
    scene.addChild(neko);
    neko.x = 320 / 2 - 32;
    neko.y = 480 / 2 - 52;
    neko.frame = [0, 0, 1, 1, 2, 2, 3, 3]; 

    // 
    var hand = new ExSprite(42, 32);
    hand.image = core.assets["images/cf307/nadenade.png"];
    scene.addChild(hand);
    hand.x = neko.x + 27;
    hand.y = neko.y;
            
    // ねこちゃんをなでると
    hand.addEventListener(Event.TOUCH_START, function(){
        hand.frame = 1;
        neko.tl.moveBy(0, -5, 2);
        neko.tl.moveBy(0, 5, 2);        
        counter++; 
        console.log("なでっ!!");
        console.log(counter);
        label.text = counter;
        // 33以上でおすわり
        if(counter >= 33){
            console.log("おすわりニャン!!");
            neko.image = core.assets["images/cf307/nekoosuwari.png"];
            neko.tl.clear();
        }
        // 66以上で箱すわり
        if(counter >= 66){
            console.log("箱すわりニャン!!");
            neko.image = core.assets["images/cf307/nekohako.png"];
            hand.tl.moveTo(hand.x, neko.y + 10, 0);            
        }
     // 100以上でおやすみ
        if(counter >= 100){
            console.log("極楽ニャン!!");
            neko.image = core.assets["images/cf307/nekonemuri.png"];
            hand.remove();
        }                                                  
    });
    // なで終わり
    hand.addEventListener(Event.TOUCH_END, function(){
        hand.frame = 0;       
    });

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

}

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();
}

15

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

var assets = [
    "images/back_town.png",
    "images/washi_stand.png",
    "images/washi_sit.png",
    "images/washi_kick_l.png",
    "images/washi_kick_r.png",
    "images/title.png",// タイトル
    "sounds/hit.mp3",
    "sounds/jump.mp3",
    "images/cf307/nuhehidari.png",
    "images/cf307/nuhemigi.png",
    "images/cf307/zyoniue.png",
    "images/cf307/yazirusi(64).png",

];

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

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

    scene.backgroundColor = "darkgray";

    // 
    var town = new Sprite(320, 480);
    town.image = core.assets["images/back_town.png"];
    scene.addChild(town);

    // ラベル
    var label = new Label("タップで移動");
    label.x = 320 / 2 - 150 / 2;
    label.y = 340 + 44;
    label.color = "black";
    label.font = "32px Arial";
    scene.addChild(label);
    
    // わし
    var washi = new Sprite(64, 64);
    washi.image = core.assets["images/cf307/nuhehidari.png"];
    washi.x = 160 - 32;
    washi.y = 260;
    scene.addChild(washi);
    washi.scale(1.5, 1.5);

    // 矢印左
    var hidari = new Sprite(64, 64);
    hidari.image = core.assets["images/cf307/yazirusi(64).png"];
    hidari.x = washi.x - 64;
    hidari.y = washi.y;
    scene.addChild(hidari);
    hidari.scale(0.8, 0.8);
    hidari.rotate(-90);

    // 矢印右
    var migi = new Sprite(64, 64);
    migi.image = core.assets["images/cf307/yazirusi(64).png"];
    migi.x = 160 - 32 + 64;
    migi.y = 260;
    scene.addChild(migi);
    migi.scale(0.8, 0.8);
    migi.rotate(90);

    // 矢印上
    var ue = new Sprite(64, 64);
    ue.image = core.assets["images/cf307/yazirusi(64).png"];
    ue.x = 160 - 32;
    ue.y = 260 - 64 - 6;
    scene.addChild(ue);
    ue.scale(0.8, 0.8);
    // 矢印下
    var sita = new Sprite(64, 64);
    sita.image = core.assets["images/cf307/yazirusi(64).png"];
    sita.x = 160 - 32;
    sita.y = 260 + 64;
    scene.addChild(sita);
    sita.scale(0.8, 0.8);
    sita.rotate(180);
    scene.addEventListener(Event.TOUCH_START, function(e){
        console.log("ごりら");
        console.log(e.x);
        if(e.x < washi.x){
            console.log("ちっちゃいね");
            washi.image =  core.assets["images/cf307/nuhehidari.png"];
            label.text = " 左ぢゃ!";
            washi.moveBy(-20, 0, 0);
            hidari.moveBy(-20, 0, 0);
            migi.moveBy(-20, 0, 0);
            ue.moveBy(-20, 0, 0);
            sita.moveBy(-20, 0, 0);
        label.moveBy(-20, 0, 0);
        }
        if(washi.x + washi.width < e.x){
            console.log("でかいね");
        washi.image =  core.assets["images/cf307/nuhemigi.png"];
            label.text = " 右ぢゃ!";
            washi.moveBy(20, 0, 0);
            hidari.moveBy(20, 0, 0);
            migi.moveBy(20, 0, 0);
            ue.moveBy(20, 0, 0);
            sita.moveBy(20, 0, 0);
            label.moveBy(20, 0, 0);
                if(washi.y > e.y){
            console.log("うえだね");
        washi.image =  core.assets["images/cf307/zyoniue.png"];
            label.text = " 上ぢゃ!";
            washi.moveBy(0, -20, 0);
            hidari.moveBy(0, -20, 0);
            migi.moveBy(0, -20, 0);
            ue.moveBy(0, -20, 0);
            sita.moveBy(0, -20, 0);
            label.moveBy(0, -20, 0);
                if(washi.y + washi.height < e.y){
            console.log("しただね");
        washi.image =  core.assets["images/cf307/nuhehidari.png"];
            label.text = " 下ぢゃ!";
            washi.moveBy(0, 20, 0);
            hidari.moveBy(0, 20, 0);
            migi.moveBy(0, 20, 0);
            ue.moveBy(0, 20, 0);
            sita.moveBy(0, 20, 0);
            label.moveBy(0, 20, 0);
            });
    //==========
    // ここまで
    //==========
}

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();
}

ゲームって男の世界だなって思う

いつもお世話になっている美容師さんは、店長で男性の方なのですが、美容業界に身を置くだけあっていつもおしゃれで、無頓着な私からすると別世界のような人です。

一人娘さんがいらっしゃって、年頃になってファッション雑誌を買うようになり、将来もお父さんと同じ道を目指しているそうです。娘さんにファッションコーディネイトのチェックをしてもらったりしているそうで、仲良しでいいですね〜と言いましたら、「いやいや、そろそろ父親から離れていく年頃で、こちらも必死です」と言われて、微笑ましいのと同時に意外でした。

なんでも、女の子はある頃になると父親の匂いが臭いと感じるようになって、自然と遠ざけるようになるとか。遺伝子の関係でそうなるという説があるそうです。

でも娘さんと仲良く過ごしたいと努力をしているなんて、偉いというか、よそのお父さんとあまり話をする機会もないのですが、やっぱり家族であっても一つの人間関係で、みんな言わないだけで努力されているのかなと思ったりしたのでした。

私は今のところそこまでの努力はしていませんが、女の子だけでなく男の子でも、形は違ってもやがて親離れ子離れの時はくる訳で、また別の愛の形で愛していかなきゃいけないんだな私はその時その寂しさに耐えられるだろうかとか準備をしていこうとふと思う今日この頃です。(案外平気かもしれませんが)

考えてみれば男の子と女の子ってずいぶん違うものだなって、プログラミングをとおしても何度か考えさせられました。

プログラミングで何かゲームを作ろうとなったとき、何を思うのでしょう・・。ゲームの王道といえば例えばシューティングゲームがあると思うのですが、申し訳ないことに、私にはこれが浮かびませんでした。

猫ちゃんをなでる、とか、球が行ったり来たりとか、すごろくみたいなものとか。自分が好きだったゲームに似たものということもありますが、シューティングというのは、男の本能からくる思考・志向・嗜好だと思うのです。

戦闘機から弾を発射して、敵機を撃ち落とす・・・考えてみたらなんて物騒な・・女の脳の初期値にこういうものはインプットされていません。それどころか、私は女子にしてはずいぶんシューティングゲームをやったと思いますし(弟に付き合わされた)、嫌というほど見せられたりした(これまた弟のすごい腕前をたくさん)にもかかわらず、発想に出てこなかったのです・・。

元々コンピュータの世界というものが、理系で、男っぽい世界で、男の人の嗜好で作られていったものがコンピュータゲームなのだから、当たり前と言えば当たり前なのかもしれません。

先日、教室のお父さんが、子供の頃から集めて大切にされてきたゲーム機を持ってきて見せてくださいましたが、やっぱりどれも男の子の世界を感じました。

私の周りで女の子もゲームをし始めたのは、ゲームウォッチが最初なのではないかと思います。流行っていた頃はみんな一人一機ずつ持っている感じで、それをお互いに交換して遊んだ思い出が、最初のゲームの思い出です。

私の主人は、ある専門的な仕事をしていますが、パッと見、その職業であることを言い当てられる人はまずいません。その職業の仕事柄とはかけ離れた雰囲気だからです。主人のいいところは、信じられないほど温和で穏やかで優しいところです。声を荒げたりすることもありません。人と揉めたり争ったりすることが何より嫌いな、実に、平和的な人です。

そんな主人の趣味というか、好きなものは、なぜか戦車や戦闘機、いわゆるアーミー愛好家です。私にはあまり理解できない世界です。ドイツと言えばティーガ?戦車とか、アメリカと言えばコルセア?だとか、どれがかっこいいとかどうとか、本棚を見れば「世界の駄っさく機」とか「陸軍下士官兵よもやま物語」のシリーズとか、「ああ海軍予備学生」とか(今見たらまた何か増えてる・・もうやだ)、「丸」とかいう雑誌の古本を見つける度買ってくるので処分したい私と一悶着したり、好きな話はたしかノルマンディー作戦だったかな、戦争物も好きで・・戦争ものの話というとヒューマニズムを描いて美化していますが、私は、極限状態でのヒューマニズムは確かに素晴らしく感動的で、それが嘘だとは思いませんが、一方で戦争という極限状態ほど人間の本当の醜さというものが出るところもないと思うのです。ただ、醜すぎて、そんなものは映画や話にもできないのではないかと思っています。

私が理解できないというか不思議に思うのは、その趣味の内容というより、どうしてそんな温和で争いごとも嫌いな主人がそんなものが好きなのかということなのです。聞けば、「別に戦争は好きではない」と言います。確かに、主人に限らず、戦争が好きだとか戦地に行きたいなどという人はほとんどいないでしょう。

でも、現にそういう本がいっぱいあって、愛好家がたくさんいるのです。惹かれている人がたくさんいるということです。

「戦争が好きなわけではない」と言いながら、私にとってはまず戦争(人殺し)ということが連想されてしまうものが好きということが理解できなくて、リビングに戦車や戦闘機の模型を置くことに抵抗を感じてきました。

しかし、思わぬところでこれってもしかすると男性の本能なのだから仕方ないのかもしれないと考えさせられたのでした。

それは、CodeFriendsに通い初めてから間も無くのこと、教室で使っているエディタには投稿というか、スクール内で閲覧できるようにリリースするスペースがあって、そこにTちゃんのお父さんが作られたというゲームがあり、授業の中で紹介されたのでした。

それを見て私は衝撃を受けてしまいました。

なにこれ、うちの主人の脳内と同じじゃない!?・・・(Tちゃんのお父さん失礼だったらすみません。悪い意味じゃないです!)

それはTちゃんのお父さんが初めてやったゲームを再現されたものだとか。手前から大砲を向こうの船に向かって撃つと当たって爆発して燃え上がるという、遠近感が素晴らしく表現されている美しいグラフィックです。

そして思いました。・・主人だけじゃないんだ、男の人ってたいていこういうのが好きで頭の中にあるのね・・。

雄は、激しい生存競争の中で、自分達の子孫を残すために、強いものが戦いに勝って伴侶を獲得してきたという生物としての長い歴史があって、「闘い」というものが、あらかじめ本能にあるのでしょう。強そうなものがかっこいい、戦闘に勝たなければ生き残れない、戦って勝ちたいといういわゆる闘争本能というのでしょうか、だから男の人には元々そういう本能が、歴史上の人間同士の戦争というもの以前にあるのだろうなと思ったのでした。

つい先日手にした「ゲームシナリオ作法」(川邊一外著)という本にも書いてありました。

「ゲーム」は、人間の闘争本能に基礎を置いています。
闘争は、個体保存のかかわる人間の基本的な欲求の一つです。
 Gameとは、もともとjoy(悦び)を意味する古代スカンジナビア語gamanに由来するといいますが、食欲や性欲と同じように、人間の本能的な欲求に、常に強烈な快楽がまつわるのは面白いことです。
 ルールによって闘争にかかわる流血や死の要素を除き、快楽の部分のみを抽出したシステムが、ゲームというものです。

でもこれは、男の人にとってのゲームだと思うのです。人にもよると思いますが、女性にはそんなに闘争本能はないと思うからです。

先に、コンピュータというものが理系で、男性的でと書きましたが、理系文系というのもここではあまり関係ないかも知れません。

戦争ものの好きな主人は文系でパソコンもできませんし、私は高校のときから理系クラスで、パソコンも好きです。

もしかすると、実生活では極めて平和的なうちの主人は、秘められた闘争本能を、趣味の世界で解放することによってバランスをとっているのかも知れません。そう思い至って、はじめて主人の趣味に対して少し理解できたといいますか、それまでよりも寛容な気持ちになれました。

主人に限らず、人は、ゲームという趣味の世界で、抑圧された闘争本能を解放して心を満たしているのですね。

ということは、女性にある本能といえば、母性本能です。これを満たすようなゲーム・・たまごっちじゃないでしょうか。でも、別に母性本能は抑圧されているわけではないので、また違った反応が出るということを、私は実体験したのでした。(続く・・?)

主人が今やっているゲーム・・30年越しのゲームクリアなるでしょうか

itch.io ゲームの投稿の仕方

ゲーム投稿サイト itch.io

英語のサイトなので、投稿の際は結構苦労しました。覚えとして残しておきます。

1 ユーザー登録

まずはユーザー登録をします。トップページの右上にある「Register」から登録画面に入ります。

 

 

 

 

 

 

 

2 ユーザー登録画面

 

 

3 ゲームの投稿

アカウントを作成すると、右上にアカウントが表示されるので、その下の矢印をクリックすると下にメニューが表示されます。

その中のUpload new projectを選択すると、ゲームのアップロード画面になります。

 

 

 

 

 

 

 

 

 

4 ゲームのアップロード画面

それぞれフォームに記入していきます。後から変更できるものがほとんどなので、よほど間違えなければ大丈夫だと思います。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

超∞満腹Hard(解説)

Hardとありますがそれほど難しくありません。

当初に構想した、ガスの噴射で登って行くというゲームです。

調子よく登りすぎると、いがぐりが急に出てきて当たってしまうのでそこがポイントです。

// Main
console.log("Hello EnchantJS!!");
var assets = [
    "images/back_sky.png",
    "images/title.png",// タイトル
    "sounds/coin.mp3",
    "sounds/jump.mp3",
    "images/cf307/momo.png",
    "images/joe_gass.png",
    "sounds/gass.mp3",
    "images/cf307/oimo (3).png", 
    "images/b_left.png", 
    "images/b_right.png",
    "images/cf307/wareimo (1).png",
    "images/cf307/wareimo1 (2).png",
    "sounds/cf307/jump12.mp3", 
    "images/title_gameclear.png",
    "images/cf307/blueground.png",
    "images/title_gameover.png",
    "images/cf307/momochanzannen.png",
    "sounds/cf307/se_maoudamashii_onepoint31.mp3",
    "sounds/cf307/correct2.mp3",
    "images/cf307/oimokirakira.png",
    "images/cf307/oimokirakira1.png",
    "images/cf307/igaguri.png",
    "images/b_red.png",
    "images/cf307/hi.png",
    "sounds/cf307/matchstick-put-fire1.mp3",
    "sounds/bomb.mp3",
    "images/bomb.png",
    "sounds/cf307/strike1.mp3",
    "images/back_mountain.png",
    "sounds/cf307/kotsudumi1.mp3",
    "sounds/cf307/suck1.mp3", 
    "images/cf307/wareguri.png", 
    "images/cf307/oimohokahoka1.png",
    "images/cf307/igagurikuru.png",
    "images/cf307/oimokirahoka.png",  
];

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

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

    scene.backgroundColor = "skyblue";
    
    // 
    var sky3 = new ExSprite(320, 241);
    sky3.image = core.assets["images/back_mountain.png"];
    scene.addChild(sky3);
    sky3.tl.moveTo(0, 240, 0);
    sky3.tl.moveBy(0, 240, 250);
    sky3.tl.loop();
    
    var sky1 = new ExSprite(320, 241);
    sky1.image = core.assets["images/back_mountain.png"];
    scene.addChild(sky1);
    sky1.tl.moveTo(0, -240, 0);
    sky1.tl.moveBy(0, 480, 500);
    sky1.tl.loop();
    sky1.tl.skip(500/2);
    var sky2 = new ExSprite(320, 241);
    sky2.image = core.assets["images/back_mountain.png"];
    scene.addChild(sky2);
    sky2.scale(-1, 1);
    sky2.tl.moveTo(0, -240, 0);
    sky2.tl.moveBy(0, 480, 500);
    sky2.tl.loop();
    sky2.tl.skip(0);
   
    // おいもグループ
    var oimoGroup = new Group();
    scene.addChild(oimoGroup);

    // おいもグループ1
    var oimoGroup1 = new Group();
    scene.addChild(oimoGroup1); 

    // 地面
    var ground = new ExSprite(320, 55);
    ground.image = core.assets["images/cf307/blueground.png"];
    ground.x = 0;
    ground.y = 480;
    scene.addChild(ground);
    
    // おいもが落ちてくる
    scene.tl.delay(30);
    scene.tl.then(function() {
        var oimo = new ExSprite(32, 32);
        oimo.image = core.assets["images/cf307/oimohokahoka1.png"];
        oimo.x = bigoimo.x + bigoimo.width / 2 - oimo.width/2; 
        oimo.y = bigoimo.height / 2 - oimo.height / 2 + 34;
        oimoGroup.addChild(oimo);
        oimo.frame = [0, 0, 1, 1, 2, 2, 3, 3, 4, 4];
        oimo.scale(1.2, 1.2);
        oimo.tl.moveBy(0, 480, 150);
        oimo.tl.then(function() {
            oimo.remove();
        });
        // おいもでももちゃんがブッ
        oimo.addCollision(momo);
        oimo.addEventListener(Event.COLLISION, function(e) {
            // おいもが消えて
            oimo.remove();
            var oimo1 = new ExSprite(32, 32);
            oimo1.image = core.assets["images/cf307/oimo (3).png"];
            oimo1.x = oimo.x;
            oimo1.y = oimo.y;
            scene.addChild(oimo1);      
            oimo1.scale(1.2, 1.2);
            oimo1.tl.fadeTo(0.5, 0).and().scaleTo(0.2, 0.2, 5);
            var sound = core.assets["sounds/cf307/suck1.mp3"].clone();
            sound.play();               
            oimo1.tl.then(function(){
                oimo1.remove();
                // 進む
                momo.moveBy(0, -64, 5);
                if(momo.y < -32){
                    momo.y = 200;
                }             
                var sound = core.assets["sounds/gass.mp3"].clone();
                sound.play();
                // ももちゃんブッ 
                var bomb = new ExSprite(32, 32);
                bomb.image = core.assets["images/joe_gass.png"];
                bomb.x = momo.x;
                bomb.y = momo.y + 32;
                scene.addChild(bomb);        
                bomb.frame = [0, 1, 2, 3, 4, null];                  
            });         
            // 満腹度アップ
            score += 10;
            // 300点になると
            if(290 < score){
                // いがぐり消える
                asteroidGroup.remove();
                // 中央に移動
                bigoimo.tl.clear();
                bigoimo.tl.moveTo(160 - 40, 34, 10);
                bigoimo.tl.then(function(){                
                    bigoimo.tl.clear(); //これ必要
                    // おいもシャワー
                    bigoimo.tl.delay(2);
                    bigoimo.tl.then(function(){
                        var oimo = new ExSprite(32, 32);
                        oimo.image = core.assets["images/cf307/oimo (3).png"];
                        oimo.x = bigoimo.x + bigoimo.width / 2 - oimo.width/2; 
                        oimo.y = bigoimo.height / 2 - oimo.height / 2 + 34;
                        oimoGroup1.addChild(oimo);
                        oimo.scale(1.2, 1.2);
                        var x3 = getRandom(-100, 420);
                        oimo.tl.moveTo(x3, 480, 120/2);
                        oimo.tl.then(function() {
                            oimo.remove();
                        });
                        // ももちゃんおいもシャワーを浴びる
                        oimo.addCollision(momo);
                        oimo.addEventListener(Event.COLLISION, function(e) {
                            // おいもが消えて
                            oimo.tl.clear();
                            oimo.tl.moveBy(0, -5, 0);
                            oimo.tl.fadeTo(0.5, 0).and().scaleTo(0.2, 0.2, 5);
                            oimo.tl.delay(0);
                            var sound = core.assets["sounds/cf307/suck1.mp3"].clone();
                            sound.play();
                            oimo.tl.then(function(){
                                oimo.remove();
                                // ももちゃんブッ 
                                var bomb = new ExSprite(32, 32);
                                bomb.image = core.assets["images/joe_gass.png"];
                                bomb.x = momo.x;
                                bomb.y = momo.y + 32*3;
                                scene.addChild(bomb);
                                bomb.scale(3, 3);       
                                bomb.frame = [0, 1, 2, 3, 4, null]; 
                                var sound = core.assets["sounds/gass.mp3"].clone();
                                sound.play();
                            });                                
                            // 満腹度アップ
                            score += 300;
                            // ももちゃん進む
                            //momo.moveBy(-momo.x / 10 + 160 /10 - 40 /10, -10, 5);
                            if(momo.y < -32){
                                momo.y = 200;                           
                            }                                             
                        });
                    });
                }); 
                bigoimo.tl.loop();
                // ゲームクリア       
                var gameclear = new ExSprite(147, 48);
                gameclear.image = core.assets['images/title_gameclear.png'];
                gameclear.x = 320 / 2 - gameclear.width/2;
                gameclear.y = 480 / 2 - gameclear.height/2;
                scene.addChild(gameclear);
                // 大きく
                gameclear.scale(0.5, 0.5);
                gameclear.tl.scaleTo(2, 2, 24);
                gameclear.tl.then(function() {
                    // サウンド
                    var sound = core.assets['sounds/cf307/correct2.mp3'].clone();
                    sound.play();
                    //core.stop();
                });
                // おいもグループを消す
                oimoGroup.remove();
                // ももちゃん大きくなりながら移動
                momo.tl.clear();                             
                momo.tl.then(function(){                     
                    momo.tl.moveTo(320 / 2 - 16, 480 / 2 - 16 + 96, 16).and().scaleTo(3, 3, 16);
                });
             }        
        });
    });
    scene.tl.loop();          
          
    // いがぐり落ちてくる
    ground.tl.delay(20);
    ground.tl.then(function() {
        var asteroid = new ExSprite(32, 32);
        asteroid.image = core.assets["images/cf307/igagurikuru.png"];
        asteroid.x = getRandom(0, 320 - 32);
        asteroid.y = 0;
        asteroidGroup.addChild(asteroid);
        asteroid.frame = [0, 1, 2 ,3];
        //asteroid.scale(0.9, 0.9);
        asteroid.tl.moveBy(0, 480, 50);
        asteroid.tl.then(function() {
            asteroid.remove();
        });
        //b-むと衝突したとき
        asteroid.addCollision(beamGroup);
        asteroid.addEventListener(Event.COLLISION, function(e) {
            asteroid.remove();             
            var bomb = new ExSprite(32, 32);
            bomb.image = core.assets["images/bomb.png"];
            bomb.x = asteroid.x;
            bomb.y = asteroid.y;
            scene.addChild(bomb);
            bomb.scale(1, 1);
            bomb.frame = [0, 1, 2, 3, 4, null];       
            var sound = core.assets["sounds/cf307/kotsudumi1.mp3"].clone();
            sound.play();
            //いがぐり割れる
            bomb.tl.then(function(){  
                var wareguri = new ExSprite(32, 32);
                wareguri.image = core.assets["images/cf307/wareguri.png"];
                wareguri.x = asteroid.x;
                wareguri.y = asteroid.y;
                scene.addChild(wareguri);
                wareguri.scale(1.3, 1.3);
                // 消える
                wareguri.tl.delay(3);
                wareguri.tl.then(function(){
                    wareguri.remove();
                });
            });            
        });                   
    });     
    ground.tl.loop();
    // 巨大おいも
    var bigoimo = new ExSprite(80, 80);
    bigoimo.image = core.assets["images/cf307/oimokirahoka.png"];
    var x = getRandom(0, 320 - 32*2.5);
    bigoimo.x = x;
    bigoimo.y = - 32 * 2.5;
    scene.addChild(bigoimo);
    bigoimo.frame = [0, 0, 1, 1, 2, 2, 3, 3, 4, 4];
    //bigoimo.tl.delay(30);
    bigoimo.tl.moveBy(0, 80 + 34, 30);
    bigoimo.tl.then(function() {
        var x1 = getRandom(240 - 80, 320 - 40);
        var x2 = getRandom(-40, 240); 
        bigoimo.tl.moveTo(x1, 34, 30);
        bigoimo.tl.moveTo(x2, 34, 30);        
        bigoimo.tl.loop();
    });
    //ビームグループ
    var beamGroup = new Group();
    scene.addChild(beamGroup);
    // いがぐりグループ
    var asteroidGroup = new Group();
    scene.addChild(asteroidGroup); 
    // 左へ移動するボタン
    var button_left = new ExSprite(62, 55);
    button_left.image = core.assets["images/b_left.png"];
    button_left.x = 320/2 - 62 - 31;
    button_left.y = 480 - 55;
    scene.addChild(button_left);
    // 左ボタンタップ開始
    button_left.addEventListener(Event.TOUCH_START, function(){
        button_left.frame = 1;
        momo.x -= 15;
        if(momo.x < - 16){
            momo.x = 304;
        }
        var sound = core.assets["sounds/cf307/jump12.mp3"].clone();
        sound.play();
    });
    // 左ボタンタップ終了
    button_left.addEventListener(Event.TOUCH_END, function(){
        button_left.frame = 0;
    });
    // 右へ移動するボタン
    var button_right = new ExSprite(62, 55);
    button_right.image = core.assets["images/b_right.png"];
    button_right.x = 320/2 + 31;
    button_right.y = 480 - 55;
    scene.addChild(button_right);
    // 右ボタンタップ開始
    button_right.addEventListener(Event.TOUCH_START, function(){
        button_right.frame = 1;
        momo.x += 15;
        if(320 - 16 < momo.x){
            momo.x = - 16;
        }
        var sound = core.assets["sounds/cf307/jump12.mp3"].clone();
        sound.play();
    });
    // 右ボタンタップ終了
    button_right.addEventListener(Event.TOUCH_END, function(){
        button_right.frame = 0;
    });
    // 火を発射するボタン
    var button_fire = new ExSprite(62, 55);
    button_fire.image = core.assets['images/b_red.png'];
    button_fire.x = 320 / 2 - button_fire.width / 2;
    button_fire.y = 480 - 55;
    scene.addChild(button_fire);
    button_fire.addEventListener(Event.TOUCH_START, function(){
        button_fire.frame = 1;
    });
    button_fire.addEventListener(Event.TOUCH_END, function(){
        button_fire.frame = 0;
    });
    // 火を発射
    button_fire.addEventListener(Event.TOUCH_START, function(){
        var beam = new ExSprite(32, 32);
        beam.image = core.assets['images/cf307/hi.png'];
        beam.x = momo.x + momo.width / 2 - beam.width / 2;
        beam.y = momo.y;
        beamGroup.addChild(beam);
        var sound = core.assets["sounds/cf307/matchstick-put-fire1.mp3"].clone();
        sound.play();
        // 上に向かって移動させよう
        beam.tl.moveBy(0, -480, 20);
        beam.tl.then(function(){
            beam.remove();
        });
    });  
   
    // ももちゃん
    var momo = new ExSprite(32, 32);
    momo.image = core.assets["images/cf307/momo.png"];
    momo.x = 320 /2 - 16;
    momo.y = 200;
    scene.addChild(momo);
    momo.frame = [0, 0, 1, 1, 2, 2];
    // ももちゃんを動かす
    momo.tl.moveBy(0, 480, 350);
    momo.tl.moveBy(0, 480, 350);
    momo.tl.loop();
    // スコア表示
    var score = 0;
    scoreLabel = new Label('SCORE : 0');
    scene.addChild(scoreLabel);
    scoreLabel.x = 10;
    scoreLabel.y = 10;
    scoreLabel.color = 'gray';
    scoreLabel.font = "24px 'PixelMplus10'";
    scoreLabel.addEventListener(Event.ENTER_FRAME, function() {
        scoreLabel.text = '満腹度(300で(^^)) : ' + score;
    });       
    // ももちゃん地面に衝突でゲームオーバー
    ground.addCollision(momo);
    ground.addEventListener(Event.COLLISION,function(e){
        // 残念ももちゃん
        momo.remove();
        var momoz = new ExSprite(32, 32);
        momoz.image = core.assets['images/cf307/momochanzannen.png'];
        momoz.x = momo.x;
        momoz.y = momo.y;
        scene.addChild(momoz);
        momoz.tl.then(function(){         
            // ゲームオーバーを表示
            var gameover = new ExSprite(147, 48);
            gameover.image = core.assets['images/title_gameover.png'];
            gameover.x = 320 / 2 - gameover.width/2;
            gameover.y = 480 / 2 - gameover.height/2;
            scene.addChild(gameover);
            // 大きく
            gameover.scale(0.5, 0.5);
            gameover.tl.scaleTo(2.3, 2.3, 10);
            gameover.tl.then(function() {
                core.stop();
            });
        });
        var sound = core.assets["sounds/cf307/se_maoudamashii_onepoint31.mp3"].clone();
        sound.play();      
    });
  
    // ももちゃんいがぐりに衝突でゲームオーバー
    momo.addCollision(asteroidGroup);
    momo.addEventListener(Event.COLLISION, function(e) {
        momo.remove();
        var momoz = new ExSprite(32, 32);
        momoz.image = core.assets['images/cf307/momochanzannen.png'];
        momoz.x = momo.x;
        momoz.y = momo.y;
        scene.addChild(momoz);
        // いがぐり跳ねる
        asteroidGroup.remove();
        var asteroid = new ExSprite(32, 32);
        asteroid.image = core.assets["images/cf307/igaguri.png"];
        asteroid.x = momo.x;
        asteroid.y = momo.y - 32;
        scene.addChild(asteroid);
        //asteroid.scale(0.9, 0.9);
        asteroid.tl.moveBy(20, -30, 3);
        asteroid.tl.moveBy(20, 100, 5);
        // ポコッ
        var sound = core.assets["sounds/cf307/strike1.mp3"].clone();
        sound.play();            
        asteroid.tl.then(function()
            var sound = core.assets["sounds/cf307/se_maoudamashii_onepoint31.mp3"].clone();
            sound.play();
            // ゲームオーバーを表示
            var gameover = new ExSprite(147, 48);
            gameover.image = core.assets['images/title_gameover.png'];
            gameover.x = 320 / 2 - gameover.width/2;
            gameover.y = 480 / 2 - gameover.height/2;
            scene.addChild(gameover);
            // 大きく
            gameover.scale(0.5, 0.5);
            gameover.tl.scaleTo(2, 2, 10);
            gameover.tl.then(function() {
                core.stop();
            });
        });     
    });  
 
    //==========
    // ここまで
    //==========
}

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(解説)

 8.おいも=3(音注意)^^ を発展させて、おならの音に合うように、戦闘機におしりをつけようと思ったのですが、戦闘機の好きな人に怒られるかもと思い、クレヨンしんちゃんのようなおしりにしようと思いましたが、おしりそのままでは生々しいので、お尻の象徴である桃になりました。

何もしないと落ちて行き、おいもをたべるとおならのガス噴射で進むというものを最初から考えていましたが、まずは簡単バージョンで、落ちず進まず横移動でおいもを食べて行くというものを作りました。

クリアすると「ブブッブ、ピンポーン」と鳴りますが、この「ブブッブ」のリズムは偶然の産物です。

// Main
console.log("Hello EnchantJS!!");
var assets = [
    "images/back_sky.png",
    "images/title.png",// タイトル
    "sounds/coin.mp3",
    "sounds/jump.mp3",
    "images/cf307/momo.png",
    "images/joe_gass.png",
    "sounds/gass.mp3",
    "images/cf307/oimo (3).png", 
    "images/b_left.png", 
    "images/b_right.png",
    "images/cf307/wareimo (1).png",
    "images/cf307/wareimo1 (2).png",
    "sounds/cf307/jump12.mp3", 
    "images/title_gameclear.png",
    "images/cf307/blueground.png",
    "images/title_gameover.png",
    "images/cf307/momochanzannen.png",
    "sounds/cf307/se_maoudamashii_onepoint31.mp3",
    "sounds/cf307/correct2.mp3",
    "images/cf307/oimokirakira.png",
    "images/cf307/oimokirakira1.png",
    "images/cf307/igaguri.png",
    "images/b_red.png",
    "images/cf307/hi.png",
    "sounds/cf307/matchstick-put-fire1.mp3",
    "sounds/bomb.mp3",
    "images/bomb.png",
    "sounds/cf307/strike1.mp3",
    "images/back_mountain.png",
    "sounds/cf307/kotsudumi1.mp3",
    "sounds/cf307/suck1.mp3", 
    "images/cf307/wareguri.png",
    "images/cf307/igagurikuru.png",
    "images/cf307/oimohokahoka1.png",   
];
function gameStart(){// ゲーム画面
    scene = gameManager.createGameScene();
    core.replaceScene(scene); core.resume();
    //==========
    // ここから
    //==========
    scene.backgroundColor = "skyblue";
    
    // 
    var sky3 = new ExSprite(320, 241);
    sky3.image = core.assets["images/back_mountain.png"];
    scene.addChild(sky3);
    sky3.tl.moveTo(0, 240, 0);
    sky3.tl.moveBy(0, 240, 250);
    sky3.tl.loop();
    
    var sky1 = new ExSprite(320, 241);
    sky1.image = core.assets["images/back_mountain.png"];
    scene.addChild(sky1);
    sky1.tl.moveTo(0, -240, 0);
    sky1.tl.moveBy(0, 480, 500);
    sky1.tl.loop();
    sky1.tl.skip(500/2);
    var sky2 = new ExSprite(320, 241);
    sky2.image = core.assets["images/back_mountain.png"];
    scene.addChild(sky2);
    sky2.scale(-1, 1);
    sky2.tl.moveTo(0, -240, 0);
    sky2.tl.moveBy(0, 480, 500);
    sky2.tl.loop();
    sky2.tl.skip(0);
   
    // おいもグループ
    var oimoGroup = new Group();
    scene.addChild(oimoGroup); 
   
    // 地面
    var ground = new ExSprite(320, 55);
    ground.image = core.assets["images/cf307/blueground.png"];
    ground.x = 0;
    ground.y = 480;
    scene.addChild(ground);
    
    // おいもが落ちてくる
    scene.tl.delay(30);
    scene.tl.then(function() {
        var oimo = new ExSprite(32, 32);
        oimo.image = core.assets["images/cf307/oimohokahoka1.png"];
        oimo.x = bigoimo.x + bigoimo.width / 2 - oimo.width/2; 
        oimo.y = bigoimo.height / 2 - oimo.height / 2 + 34;
        oimoGroup.addChild(oimo);
        oimo.frame = [0, 1, 2, 3, 4]
        oimo.scale(1.2, 1.2);
        oimo.tl.moveBy(0, 480, 150);
        oimo.tl.then(function() {
            oimo.remove();
        });
        // おいもでももちゃんがブッ
        oimo.addCollision(momo);
        oimo.addEventListener(Event.COLLISION, function(e) {
            // おいもが消えて
            oimo.tl.clear();
            oimo.tl.moveBy(0, -5, 0);
            oimo.tl.fadeTo(0.5, 0).and().scaleTo(0.2, 0.2, 5);
            var sound = core.assets["sounds/cf307/suck1.mp3"].clone();
            sound.play();
            oimo.tl.delay(0);
            oimo.tl.then(function(){
                var sound = core.assets["sounds/gass.mp3"].clone();
                sound.play();
                oimo.remove();           
                // ももちゃんブッ 
                var bomb = new ExSprite(32, 32);
                bomb.image = core.assets["images/joe_gass.png"];
                bomb.x = momo.x;
                bomb.y = momo.y + 32;
                scene.addChild(bomb);              
                bomb.frame = [0, 1, 2, 3, 4, null];
             });       
            
            // 満腹度アップ
            score += 10;
            // 100点になると
            if(90 < score){
                 // 中央に移動
                bigoimo.tl.clear();
                bigoimo.tl.moveTo(160 - 40, 34, 10);
                bigoimo.tl.then(function(){
                  // いがぐり消える
              asteroidGroup.remove();
                bigoimo.tl.clear();
                // おいもシャワー
                bigoimo.tl.delay(2);
                bigoimo.tl.then(function(){
                    var oimo = new ExSprite(32, 32);
                    oimo.image = core.assets["images/cf307/oimo (3).png"];
                    oimo.x = bigoimo.x + bigoimo.width / 2 - oimo.width/2; 
                    oimo.y = bigoimo.height / 2 - oimo.height / 2 + 34;
                    oimoGroup.addChild(oimo);
                    oimo.scale(1.2, 1.2);
                    var x3 = getRandom(-100, 420);
                    oimo.tl.moveTo(x3, 480, 120/2);
                    oimo.tl.then(function() {
                        oimo.remove();
                    });
                    // ももちゃんおいもシャワーを浴びる
             oimo.addCollision(momo);
                 oimo.addEventListener(Event.COLLISION, function(e) {
                        // おいもが消えて
                        oimo.tl.clear();
                        oimo.tl.moveBy(0, -5, 0);
                        oimo.tl.fadeTo(0.5, 0).and().scaleTo(0.2, 0.2, 5);
                        oimo.tl.delay(0);
                        oimo.tl.then(function(){
                            var sound = core.assets["sounds/gass.mp3"].clone();
                            sound.play();
                            oimo.remove();
                        });
                        // ももちゃんブッ 
                        var bomb = new ExSprite(32, 32);
                        bomb.image = core.assets["images/joe_gass.png"];
                        bomb.x = momo.x;
                        bomb.y = momo.y + 32;
                        scene.addChild(bomb);        
                        bomb.frame = [0, 1, 2, 3, 4, null];       
                        var sound = core.assets["sounds/cf307/suck1.mp3"].clone();
                        sound.play();
                        // 満腹度アップ
                        score += 100;
                        // ももちゃん進む
                        momo.moveBy(-momo.x / 10 + 160 /10 - 40 /10, -10, 5);
                        if(momo.y < -32){
                            momo.y = 200;
                        }                  
                        });
                    });
                }); 
                bigoimo.tl.loop();
            }        
        });
    });
    scene.tl.loop();
    // いがぐり落ちてくる
    ground.tl.delay(20);
    ground.tl.then(function() {
        var asteroid = new ExSprite(32, 32);
        asteroid.image = core.assets["images/cf307/igagurikuru.png"];
        asteroid.x = getRandom(0, 320 - 32);
        asteroid.y = 0;
        asteroidGroup.addChild(asteroid);
        asteroid.frame = [0, 1, 2, 3];
        //asteroid.scale(0.9, 0.9);
        asteroid.tl.moveBy(0, 480, 50);
        asteroid.tl.then(function() {
            asteroid.remove();
        });
        //b-むと衝突したとき
        asteroid.addCollision(beamGroup);
        asteroid.addEventListener(Event.COLLISION, function(e) {
            asteroid.remove();             
            var bomb = new ExSprite(32, 32);
            bomb.image = core.assets["images/bomb.png"];
            bomb.x = asteroid.x;
            bomb.y = asteroid.y;
            scene.addChild(bomb);
            bomb.scale(1, 1);
            bomb.frame = [0, 1, 2, 3, 4, null];       
            var sound = core.assets["sounds/cf307/kotsudumi1.mp3"].clone();
            sound.play();
            //いがぐり割れる
            bomb.tl.then(function(){  
                var wareguri = new ExSprite(32, 32);
                wareguri.image = core.assets["images/cf307/wareguri.png"];
                wareguri.x = asteroid.x;
                wareguri.y = asteroid.y;
                scene.addChild(wareguri);
                wareguri.scale(1.3, 1.3);
                // 消える
                wareguri.tl.delay(3);
                wareguri.tl.then(function(){
                    wareguri.remove();
                });
            });            
        });                   
    });     
    ground.tl.loop(); 
    // 巨大おいも
    var bigoimo = new ExSprite(80, 80);
    bigoimo.image = core.assets["images/cf307/oimokirakira1.png"];
    var x = getRandom(0, 320 - 32*2.5);
    bigoimo.x = x;
    bigoimo.y = - 32 * 2.5;
    scene.addChild(bigoimo);
    bigoimo.frame = [0, 0, 1, 1, 2, 2, 3, 3];
    //bigoimo.tl.delay(30);
    bigoimo.tl.moveBy(0, 80 + 34, 30);
    bigoimo.tl.then(function() {
        var x1 = getRandom(240 - 80, 320 - 32 * 2.5);
        var x2 = getRandom(0, 240); 
        bigoimo.tl.moveTo(x1, 34, 30);
        bigoimo.tl.moveTo(x2, 34, 30);        
        bigoimo.tl.loop();
    });
    // いがぐりグループ
    var asteroidGroup = new Group();
    scene.addChild(asteroidGroup);
    //ビームグループ
    var beamGroup = new Group();
    scene.addChild(beamGroup);
    // 左へ移動するボタン
    var button_left = new ExSprite(62, 55);
    button_left.image = core.assets["images/b_left.png"];
    button_left.x = 320/2 - 62 - 31;
    button_left.y = 480 - 55;
    scene.addChild(button_left);
    // 左ボタンタップ開始
    button_left.addEventListener(Event.TOUCH_START, function(){
        button_left.frame = 1;
        momo.x -= 15;
        if(momo.x < - 16){
            momo.x = 304;
        }
        var sound = core.assets["sounds/cf307/jump12.mp3"].clone();
        sound.play();
    });
    // 左ボタンタップ終了
    button_left.addEventListener(Event.TOUCH_END, function(){
        button_left.frame = 0;
    });
    // 右へ移動するボタン
    var button_right = new ExSprite(62, 55);
    button_right.image = core.assets["images/b_right.png"];
    button_right.x = 320/2 + 31;
    button_right.y = 480 - 55;
    scene.addChild(button_right);
    // 右ボタンタップ開始
    button_right.addEventListener(Event.TOUCH_START, function(){
        button_right.frame = 1;
        momo.x += 15;
        if(320 - 16 < momo.x){
            momo.x = - 16;
        }
        var sound = core.assets["sounds/cf307/jump12.mp3"].clone();
        sound.play();
    });
    // 右ボタンタップ終了
    button_right.addEventListener(Event.TOUCH_END, function(){
        button_right.frame = 0;
    });
    // 火を発射するボタン
    var button_fire = new ExSprite(62, 55);
    button_fire.image = core.assets['images/b_red.png'];
    button_fire.x = 320 / 2 - button_fire.width / 2;
    button_fire.y = 480 - 55;
    scene.addChild(button_fire);
    button_fire.addEventListener(Event.TOUCH_START, function(){
        button_fire.frame = 1;
    });
    button_fire.addEventListener(Event.TOUCH_END, function(){
        button_fire.frame = 0;
    });
    // 火を発射
    button_fire.addEventListener(Event.TOUCH_START, function(){
        var beam = new ExSprite(32, 32);
        beam.image = core.assets['images/cf307/hi.png'];
        beam.x = momo.x + momo.width / 2 - beam.width / 2;
        beam.y = momo.y;
        beamGroup.addChild(beam);
        var sound = core.assets["sounds/cf307/matchstick-put-fire1.mp3"].clone();
        sound.play();
        // 上に向かって移動させよう
        beam.tl.moveBy(0, -480, 20);
        beam.tl.then(function(){
            beam.remove();
        });
    }); 
    
    // ももちゃん
    var momo = new ExSprite(32, 32);
    momo.image = core.assets["images/cf307/momo.png"];
    momo.x = 320 /2 - 16;
    momo.y = 360;
    scene.addChild(momo);
    momo.frame = [0, 0, 1, 1, 2, 2];
    // スコア表示
    var score = 0;
    scoreLabel = new Label('SCORE : 0');
    scene.addChild(scoreLabel);
    scoreLabel.x = 10;
    scoreLabel.y = 10;
    scoreLabel.color = 'gray';
    scoreLabel.font = "24px 'PixelMplus10'";
    scoreLabel.addEventListener(Event.ENTER_FRAME, function() {
        scoreLabel.text = '満腹度(100^-^) : ' + score;
    });       
    // 巨大おいもに到達したら
    bigoimo.addCollision(momo);
    bigoimo.addEventListener(Event.COLLISION,function(e){
        // おいもたち消える
        oimoGroup.remove();
        // 巨大おいもが消えて
        bigoimo.tl.clear();
        bigoimo.tl.moveBy(0, -5, 0);
        bigoimo.tl.fadeTo(0.5, 0).and().scaleTo(0.2, 0.2, 5);
        bigoimo.tl.delay(3);
        bigoimo.tl.then(function(){
            //var sound = core.assets["sounds/gass.mp3"].clone();
            //sound.play();
            bigoimo.remove();
            var sound = core.assets["sounds/cf307/suck1.mp3"].clone();
            sound.play();
        });
        // ももちゃん大きくなりながら移動
        momo.tl.clear(); 
        momo.tl.moveTo(320 / 2 - 16, 480 / 2 - 16 + 96, 16).and().scaleTo(3, 3, 16);
        // 大きなガス
        var bigbomb = new ExSprite(32, 32);
        bigbomb.image = core.assets["images/joe_gass.png"];
        bigbomb.x = momo.x;
        bigbomb.y = momo.y + 64;
        scene.addChild(bigbomb);
        bigbomb.frame = [0, 1, 2, 3, 4];
        bigbomb.scale(3,3);
        // 爆発音
        bigbomb.tl.delay(0);
        bigbomb.tl.then(function(){              
            var sound = core.assets["sounds/gass.mp3"].clone();
            sound.play();
        });
        bigbomb.tl.loop();
        // 大ガス移動
        bigbomb.tl.moveTo(320 / 2 - 27, 320 + 70, 10).and().scaleTo(3, 3, 10);
        // 動きながら 
        bigbomb.tl.then(function(){
            var a = getRandom(-30, 30);
            var b = getRandom(-30, 30);
            bigbomb.tl.moveBy(a, b, 1);
            bigbomb.tl.moveTo(320 / 2 - 27, 320 + 70, 2);
            bigbomb.tl.loop();
        });    
        // ゲームクリア       
        var gameclear = new ExSprite(147, 48);
        gameclear.image = core.assets['images/title_gameclear.png'];
        gameclear.x = 320 / 2 - gameclear.width/2;
        gameclear.y = 480 / 2 - gameclear.height/2;
        scene.addChild(gameclear);
        // 大きく
        gameclear.scale(0.5, 0.5);
        gameclear.tl.scaleTo(2, 2, 24);
        gameclear.tl.then(function() {
            // サウンド
            var sound = core.assets['sounds/cf307/correct2.mp3'].clone();
            sound.play();
            core.stop();
        });                                 
    });

    // ももちゃんいがぐりに衝突でゲームオーバー
    momo.addCollision(asteroidGroup);
    momo.addEventListener(Event.COLLISION, function(e) {
        momo.remove();
        var momoz = new ExSprite(32, 32);
        momoz.image = core.assets['images/cf307/momochanzannen.png'];
        momoz.x = momo.x;
        momoz.y = momo.y;
        scene.addChild(momoz);
        // いがぐり跳ねる
        asteroidGroup.remove();
        var asteroid = new ExSprite(32, 32);
        asteroid.image = core.assets["images/cf307/igaguri.png"];
        asteroid.x = momo.x;
        asteroid.y = momo.y - 32;
        scene.addChild(asteroid);
        //asteroid.scale(0.9, 0.9);
        asteroid.tl.moveBy(20, -30, 3);
        asteroid.tl.moveBy(20, 100, 5);
        // ポコッ
        var sound = core.assets["sounds/cf307/strike1.mp3"].clone();
        sound.play();            
        asteroid.tl.then(function()            var sound = core.assets["sounds/cf307/se_maoudamashii_onepoint31.mp3"].clone();
            sound.play();        
            // ゲームオーバーを表示
            var gameover = new ExSprite(147, 48);
            gameover.image = core.assets['images/title_gameover.png'];
            gameover.x = 320 / 2 - gameover.width/2;
            gameover.y = 480 / 2 - gameover.height/2;
            scene.addChild(gameover);
            // 大きく
            gameover.scale(0.5, 0.5);
            gameover.tl.scaleTo(2, 2, 10);
            gameover.tl.then(function() {
                core.stop();
            });
        });     
    });   
    //==========
    // ここまで
    //==========
}
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();
}

PhyBoxSprite・PhyCircleSprite(Box2d)

四角いものはPhyBoxSprite クラスを使う。

 var ground = new PhyBoxSprite(320 * 100, 64, enchant.box2d.STATIC_SPRITE);

STATIC_SPRITEは、動かないもの。重力の影響を受けて動かしたいものには、DYNAMIC_SPRITEを使う。

 var daruma = new PhyBoxSprite(
     31,
     31,
     enchant.box2d.DYNAMIC_SPRITE,
     1, // 第四引数:density(密度)・・・省略時:1.0
     0, // 第五引数:friction(摩擦)・・・省略時:0.5
     0.3 //第六引数:restitution(反発)・・・省略時:0.3
);

 

丸いものには、PhyCircleSpriteクラスを使う。

var ball = new PhyCircleSprite(32 / 2, enchant.box2d.DYNAMIC_SPRITE);

第一引数には、半径を用いる。

四角いものでも可能。丸いものとしての動きになるみたい。

重力のある世界をつくる(Box2d)

 var world = new PhysicsWorld( 0, 9.8);
 scene.addEventListener(Event.ENTER_FRAME, function() {
     world.step(core.fps);
 });

二つの引数は、縦方向の重力と縦方向の重力。ここで9.8とは、9.8m/sということ。

この新しくつくったworldを、フレームごとに動かす(step)というのが、2行目。

fpsとは、フレームレート(Frames Per Second)のことで、ここでは16フレーム/秒。一秒の間に16回計算して動かしていますよという意味。(一秒の間に16回のstep)