ブロック崩し
投稿者 : 海ンちゅー(tsechttp05.sec.ppp.nifty.com)
- 2004/07/13(Tue) 22:41
No.6608
|
|
|
|
|
6608.lzh
ブロック崩しでブロックを貫通させようとしてるがなかなかうまくいきません。
// あたり判定: xx,yyが壁やブロックだったら、そのキャラクタパターンを返す function getAt(xx,yy) { var r,w; mx=trunc((xx-vy)/16); my=trunc((yy+vx)/16); r=$map.get(mx,my); if (r!=$pat_block+0) { return r; } mx=trunc((xx+vy)/16); my=trunc((yy-vx)/16); r=$map.get(mx,my); return r; }
// ボールの数を検査 function onUpdate() { $ballC+=1; }
life=5; survive=1; while(survive) { // ボールが完全に下に落下するまでは survive=1 while(life>0 && y+vy<$screenHeight-3){ if (crashTo($Racket)) { // ラケットに衝突したとき if (vy>0) $mplayer.play($se_racket); od=dist(vx,vy); // ボールの速さ vy=-cos((x-$Racket.x)*2)*od; vx=sin((x-$Racket.x)*2)*od; // 飛んでいく向き。ボールとラケットのx座標の差による } pa=getAt(x+vx,y+vy); // これから移動する先にあるマップパターンを読む if (pa!=$pat_block+0 ) { // 空間以外(壁やブロック)だったら mmx=mx;mmy=my; life-=1; // 跳ね返り if (getAt(x-vx,y+vy)==$pat_block+0) vx=-vx; else if (getAt(x+vx,y-vy)==$pat_block+0) vy=-vy; else {vx=-vx;vy=-vy;} // ブロックだったら if (pa<$pat_block+9) { np=$pat_block; if (pa==$pat_block+2) { 以下略・・・
上の if (pa!=$pat_block+0 ) { を if (pa<$pat_block+9 ) { にするといきなしステージクリアになったりします。 どうすればブロックが貫通するんでしょう。 だれか教えてください。ファイル送ります。
|
Re: ブロック崩し
投稿者 : bluesnow(i137107.ap.plala.or.jp)
- 2004/07/14(Wed) 11:07
No.6610
|
|
|
|
pa=getAt(x+vx,y+vy); // これから移動する先にあるマップパターンを読む if (pa!=$pat_block+0 ) { // 空間以外(壁やブロック)だったら
if( pa == $pat_block+9 ){ // 壁のときだけ //跳ね返り } if (pa < $pat_block+9) { // ブロックだったら } }
大雑把にこんなかんじでしょうか。 黄色ブロックにぶつかるとはねかえりますが、貫通する=壁とラケット以外では跳ね返らない なので、跳ね返るところを囲いました。
>if (pa!=$pat_block+0 ) { を if (pa<$pat_block+9 ) { >にするといきなしステージクリアになったりします。 は、たとえばボールが空間にいるとき pa = $pat_block+0で // ブロックだったら if (pa < $pat_block+9 ){ // 条件をみたすので中に入る if (pa==$pat_block+2) { } else { // 空間は黄色ではないので中に入る // 黄色でなければ、ブロックの数をへらす } } となってブロック数が一瞬で減っていくと思います。 stage3だとステージクリアにならないのが何故かまでは調べてません
|
Re: ブロック崩し
投稿者 : 海ンちゅー(tsechttp05.sec.ppp.nifty.com)
- 2004/07/14(Wed) 15:22
No.6611
|
|
|
|
お!おかげで貫通しました! ありがとうございます!
>黄色ブロックにぶつかるとはねかえりますが、 硬いので跳ね返るようにしたのです。
|
|