ページ 11

四角と円の当たり判定

Posted: 2012年10月08日(月) 10:04
by ヨシタケ
以前、ブロック崩しで線と円の当たり判定について質問しましたが、そのうち色々アレンジを加える場合(例えば、アイテムで一定時間ボールが下画面に落なくなるなど)
四角と円にしたほうがいいと思い変えました。
当たり判定は龍神録のレーザーの章を参考にして前は完全にバーとボール用にしてしまったため、今回は「14歳からはじめるC言語ゲームプログラミング」の
Rect2DとBall2Dという構造体を使いました。
で、実際に動かしてみたところどうもボールがバーに当たるとき場所によって変な動きになってしまいます。
ゲームの内容は下記のサイトにアップしました。パスワードは「YT2013」です。一応、どういう風に変なのかわかるように動画を入れておきました。

http://www1.axfc.net/uploader/Li/so/138137

よろしくお願いします。

Re: 四角と円の当たり判定

Posted: 2012年10月09日(火) 16:50
by softya(ソフト屋)
すいません見逃してました。
次回から面倒なのでURLはhttpからでお願いします。

時間が取れた時に拝見します。

Re: 四角と円の当たり判定

Posted: 2012年10月10日(水) 12:53
by softya(ソフト屋)
動画を見る限りはバーに当たった方向をチェックせずに無条件に上に反射しているように見えますね。
あたった場所とボール方向別の処理はされていますか? ソースコードには移動ベクトルyを反転するしか見当たらないのですが?

それとソースコードが無駄に多いので確認が困難です。整理を考えてみてください。
・グローバル変数は極力使わないでください。
・物体別・機能別にソースファイルにまとめて下さい。ボール、バー、ブロックはそれぞれ専用のソースファイルにまとめると良いでしょう。
・ファイル名、関数名、変数名が略で意味不明なものがあります。

下記サイトのプログラマー部門:「分かりやすいソースコード」も参考にしてみてください。
http://www.4gamer.net/games/173/G017380/20121009018/

それとデバッグをするためにバグを一発で再現できるボタンを作ってみたらどうでしょう。毎回再現するのは苦労しますよね?
私も再現が困難で諦めました。

Re: 四角と円の当たり判定

Posted: 2012年10月15日(月) 01:09
by ヨシタケ
アドバイスありがとうございます。
何度かころころ変えてしまっています。

結局線と円の当たり判定に戻し
上下の線に触れたときball.dy*=-1
左右の線に触れたときball.dx*=-1
となるように変えました。

また、ソースコードがごちゃごちゃしているとコメント頂いたのでとりあえずバーとボールをまとめました。