2日目
今日は寝坊しました。
がっつりしっかり。
遅くても8:30には家を出ないといけないのに起きたのが8:30
朝から新宿を激走しました。
何とか間に合ったけどね。
まじで午前休使うか迷った。
さて、仕事はですね、課題のゲーム作りしてました。
今日は本当にそればっかりしてた。
ここからはプログラミングの話になるので興味ない人は飛ばしてね。
シューティングゲーム作ってて、今日は当たり判定と敵のランダム生成のコードを主に勉強しました。
使っているのはjavascriptで、フレームワークにはenchantjs使ってます。
まずは当たり判定の話から。
まずはスプライト画像の設定をします。当然だけど。
//敵機のスプライト設定 var enemy = [] for (var i = 0 ; i >=1000 ; i++){ enemy[i] = new Sprite(32,32); //中略 enemy[i].tl.moveBy=(enemy[i], 840000, 30000); }
みたいな感じですかね。
でもこれだと、スプライト画像の見た目の大きさと実際の大きさが合ってるわけではないので、このまま当たり判定のフェーズに行くとは?!当たってねえだろ!が発生します。
どういうことかというと
enemy[i] = new Sprite(32,32);
の部分があるじゃないですか。
これは画像を32×32で切りますよってことなんですけど、実際に画面に出てるキャラは余白が透過してたりしてるので、見た目はきっちり32×32の正方形ではないんですよね。
そこで
//敵機のスプライト設定 var enemy = [] var hantei_enemy = [] for (var i = 0 ; i >=1000 ; i++){ enemy[i] = new Sprite(32,32); //中略 enemy[i].tl.moveBy=(enemy[i], 840000, 30000); game.rootScene.addChild(enemy[i]); //敵機の当たり判定 hantei_enemy[i] = new Sprite(8,32); //中略 hantei_enemy[i].tl.moveBy=(hantei_enemy[i], 840000, 30000); game.rootScene.addChild(hantei_enemy[i]); }
当たり判定の矩形を別に作ってやって、それをスプライト画像に重ねて同じ位置、同じ速度で存在させるってことにしました。
これを自機にも搭載させて
hantei_enemy[i].addEventListener(Event.ENTER_FRAME,function(){ if(this.intersect(hantei_player){ //中略 game.end(); } });
とENTER_FRAMEで終わらせます。
このとき、thisを使わないとfunctionの中の変数iとhantei_enemy[i]の変数iが別物としてカウントされてしまうので注意。
うまく作動しなくなる。
あと、game.end();はnineleapをいれてないと使えないので気を付けてください。
長くなったな、疲れたな。
ランダム生成のところはササッと終わらせます。
まぁ、上のコードを見てくれたらわかる通り、for文で敵機を作成してるんですね。
しかも一気に生成してるので、画面外にいるとはいえ、かなり大量のスプライトが存在してることになる。
これだとリソースを食って仕方がない。
今後、敵機や自機が撃つ弾とかを考慮したら重くてゲームにならない。
そこで使ったのがSetTimeout()ですね。
これで一定時間経つと敵機が生成されるという風にしました。
一応簡略的なコードを。
function enemies(){ var enemy = new Sprite(32,32); //中略 enemy.x = Math.random() * 320; enemy.y = Math.random() * -320; enemy.tl.moveBy=(enemy[i], 340, 300); enemy.addEventListener(Event.ENTER_FRAME,function(){ if(enemy.y > 340){ game.rootScene.removeChild(enemy) } } game.rootScene.addChild(enemy) ; SetTimeout(enemies(),500); }
これでfunction enemies()を500ミリ秒で実行するので、その時間が経つたびにランダムな位置に敵機が生成されます。
当たり判定の矩形も同じように作ります。
ENTER_FRAMEの部分は一定以上進んだらスプライトが消えるように設定してあります。
リソースの節約として。
まぁこのくらいですね。
長くなりました。
金曜日にこれまでの成果発表みたいな場があるのでそこ目指して完成させます。
今日は絶対日付変わる前に寝る。
彼女ほしい。
同棲したい。
結婚したい。
明日はボーナス。
やたーーーーー!
夢で千愛ちゃんに会いたいよおおおおおおおおおおおおおおお
きも
おやすみなさい。