広告
広告
↓発売日:2017年04月04日↓
Java 第2版 入門編 ゼロからはじめるプログラミング (プログラミング学習シリーズ) 新品価格 |
いよいよ最終日です。
全ブロックの当たり判定をやっていきたいと思います。
全ブロックの当たり判定と言われると何やら難しそうな事をしそうですが、冒頭でもお話した通りブロック一つ分の当たり判定を全てのブロックに対して「for」ループなどで回すだけで大丈夫です。
if(block.get_flag()){ if(ball.get_x() >= block.get_x() && ball.get_x() <= block.get_x() + block.get_width()){ if(ball.get_y() >= block.get_y() && ball.get_y() <= block.get_y() + 3){ ball.set_y(block.get_y()); ball.ch_y_speed(); block.set_flag(false); } else if(ball.get_y() <= block.get_y() + block.get_height() && ball.get_y() >= block.get_y() + block.get_height() - 3){ ball.set_y(block.get_y() + block.get_height()); ball.ch_y_speed(); block.set_flag(false); } } }
前回やったブロック一つ分だけの当たり判定になります。
わかりやすいように上面、下面の判定部分だけ抜き出してみました。
この判定を「for」ループで全てのブロックに対して行っていきます。
for(int count = 0;count < Define.MAX_BLOCK;count++){ if(blocks[count].get_flag()){ if(ball.get_x() >= blocks[count].get_x() && ball.get_x() <= blocks[count].get_x() + blocks[count].get_width()){ if(ball.get_y() >= blocks[count].get_y() && ball.get_y() <= blocks[count].get_y() + 3){ ball.set_y(blocks[count].get_y()); ball.ch_y_speed(); blocks[count].set_flag(false); break; } else if(ball.get_y() <= blocks[count].get_y() + blocks[count].get_height() && ball.get_y() >= blocks[count].get_y() + blocks[count].get_height() - 3){ ball.set_y(blocks[count].get_y() + blocks[count].get_height()); ball.ch_y_speed(); blocks[count].set_flag(false); break; } } } }
こちらが「for」ループで全ブロックに当たり判定を適用したものになります。
さきほどのブロック一つ分のものと比べてみるとわかると思いますが、
「block.get_x()」
こちらが
↓
「blocks[count].get_x()」
こうなっているだけであとはほぼ一緒ですね!
難しく考えず「for」で回すだけで全ての判定は大丈夫です。
広告
今回の作り方ですと一度判定があった場合、それ以上の判定はありえない上にその後がムダになるので当たり判定のループから「break」文で脱出しておりますが、この「break」文を削除してなおかつその後の「左面・右面」の判定部分を「else」で結ばなければ角に当たった時の判定もいちようしてくれます。
その場合どうなるかと言いますと単純に両方ともプラスマイナスが入れ替わるのでまっすぐ逆方向に反射するのですが、これを利用して角に当たった場合はランダムで
1・x方向のみプラスマイナスを反転
2・x,y方向両方のプラスマイナスを反転
3・y方向のみプラスマイナスを反転
などのようにすれば少しゲームに幅がでてくるかもしれません。
当たり
判定されます!
最終ソースになります。
大変長らくお疲れ様でした!
これで「ブロック崩しの作り方」を終わりにしたいと思います。
最後までお付き合いしていただいた方は感謝です!
完成ソースの方にささやかなスコアボックス・背景なども加えてみたのでもし興味ありましたらのぞいてみてください。
こちらのサイトを通して少しでもプログラミングの魅力を感じていただければ幸いです!
広告
↓発売日:2017年04月18日↓
Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで 新品価格 |
↓発売日:2016年06月25日↓
新品価格 |
↓発売日:2016年08月31日↓
新品価格 |
↓発売日:2018年11月21日↓
新品価格 |
↓発売日:2016年12月15日↓
新品価格 |
↓発売日:2016年09月28日↓
新品価格 |