以前、ブロック崩しで線と円の当たり判定について質問しましたが、そのうち色々アレンジを加える場合(例えば、アイテムで一定時間ボールが下画面に落なくなるなど)
四角と円にしたほうがいいと思い変えました。
当たり判定は龍神録のレーザーの章を参考にして前は完全にバーとボール用にしてしまったため、今回は「14歳からはじめるC言語ゲームプログラミング」の
Rect2DとBall2Dという構造体を使いました。
で、実際に動かしてみたところどうもボールがバーに当たるとき場所によって変な動きになってしまいます。
ゲームの内容は下記のサイトにアップしました。パスワードは「YT2013」です。一応、どういう風に変なのかわかるように動画を入れておきました。
http://www1.axfc.net/uploader/Li/so/138137
よろしくお願いします。
四角と円の当たり判定
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 四角と円の当たり判定
すいません見逃してました。
次回から面倒なのでURLはhttpからでお願いします。
時間が取れた時に拝見します。
次回から面倒なのでURLはhttpからでお願いします。
時間が取れた時に拝見します。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 四角と円の当たり判定
動画を見る限りはバーに当たった方向をチェックせずに無条件に上に反射しているように見えますね。
あたった場所とボール方向別の処理はされていますか? ソースコードには移動ベクトルyを反転するしか見当たらないのですが?
それとソースコードが無駄に多いので確認が困難です。整理を考えてみてください。
・グローバル変数は極力使わないでください。
・物体別・機能別にソースファイルにまとめて下さい。ボール、バー、ブロックはそれぞれ専用のソースファイルにまとめると良いでしょう。
・ファイル名、関数名、変数名が略で意味不明なものがあります。
下記サイトのプログラマー部門:「分かりやすいソースコード」も参考にしてみてください。
http://www.4gamer.net/games/173/G017380/20121009018/
それとデバッグをするためにバグを一発で再現できるボタンを作ってみたらどうでしょう。毎回再現するのは苦労しますよね?
私も再現が困難で諦めました。
あたった場所とボール方向別の処理はされていますか? ソースコードには移動ベクトルyを反転するしか見当たらないのですが?
それとソースコードが無駄に多いので確認が困難です。整理を考えてみてください。
・グローバル変数は極力使わないでください。
・物体別・機能別にソースファイルにまとめて下さい。ボール、バー、ブロックはそれぞれ専用のソースファイルにまとめると良いでしょう。
・ファイル名、関数名、変数名が略で意味不明なものがあります。
下記サイトのプログラマー部門:「分かりやすいソースコード」も参考にしてみてください。
http://www.4gamer.net/games/173/G017380/20121009018/
それとデバッグをするためにバグを一発で再現できるボタンを作ってみたらどうでしょう。毎回再現するのは苦労しますよね?
私も再現が困難で諦めました。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
ヨシタケ
Re: 四角と円の当たり判定
アドバイスありがとうございます。
何度かころころ変えてしまっています。
結局線と円の当たり判定に戻し
上下の線に触れたときball.dy*=-1
左右の線に触れたときball.dx*=-1
となるように変えました。
また、ソースコードがごちゃごちゃしているとコメント頂いたのでとりあえずバーとボールをまとめました。
何度かころころ変えてしまっています。
結局線と円の当たり判定に戻し
上下の線に触れたときball.dy*=-1
左右の線に触れたときball.dx*=-1
となるように変えました。
また、ソースコードがごちゃごちゃしているとコメント頂いたのでとりあえずバーとボールをまとめました。