初めて投稿させてもらいます、ラウと言います。
大学に入ってプログラミングを勉強し始めて半年たって、
ゲームを作りたいと思うようになり、シューティングを製作しようとして、このサイトに流れ着きました。
ここのサイトは初心者の自分にもとても分かりやすくまとめてあって、とても助かります。
今、自機と敵弾に当たり判定を作ろうとしているのですが、どうも上手くいきません。
過去ログなどにも色々書いてあったのをみたのですが^^;
三平方の定理を使って重なる部分がある場合、当たる判定をする、というのは分かるのですが・・・
自機、敵弾のそれぞれの当たり範囲を設定するところで、円の中心の設定は?という感じです。。。
分かりづらいと思いますが、アドバイスのほうよろしくお願いします。
当たり判定
-
管理人
Re:当たり判定
こんにちは。
私も大学に入ってプログラミングを始めた一人です。
共に頑張っていきましょうm(_ _)m
DrawGraph関数で描画する時は、指定した座標が画像の一番左上になります。
これは3章に書いてあります。
http://dixq.net/g/#3
添付ファイルの上のようになります。
画像の中心は画像サイズによって異なりますから、画像サイズを把握する必要があります。
一方、
DrawRotaGraph関数で描画する時は、指定した座標が画像の中心になります。
添付ファイルの下のようになります。
今度はどんなに画像サイズがかわってもいつも中心になりますから、中心を意識する必要がありません。
それぞれの詳細な使用方法はリファレンスをご覧ください。
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html
ちなみに、x,yの位置に、50x100サイズの画像をDrawGraphで表示するなら
私も大学に入ってプログラミングを始めた一人です。
共に頑張っていきましょうm(_ _)m
DrawGraph関数で描画する時は、指定した座標が画像の一番左上になります。
これは3章に書いてあります。
http://dixq.net/g/#3
添付ファイルの上のようになります。
画像の中心は画像サイズによって異なりますから、画像サイズを把握する必要があります。
一方、
DrawRotaGraph関数で描画する時は、指定した座標が画像の中心になります。
添付ファイルの下のようになります。
今度はどんなに画像サイズがかわってもいつも中心になりますから、中心を意識する必要がありません。
それぞれの詳細な使用方法はリファレンスをご覧ください。
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html
ちなみに、x,yの位置に、50x100サイズの画像をDrawGraphで表示するなら
DrawGraph( x+50/2 , y+100/2 , img , TRUE);こんな感じになりますね。
-
ラウ
Re:当たり判定
また質問が出来てしまったので・・・;
当たり判定は出来たんです^^;
それでも、自機が弾に当たった時の処理でおかしなことに・・・
とりあえず、自機にもフラグを作って自機を表示させて、弾に当たったらフラグを消す。
という処理をさせてみたのです。
それで、単発の弾にはしっかり当たって、消えてくれるんです。
が、どうにも連続した弾を撃たれている間、
その処理が行われていない、、、?ようなんです。
(連続弾の最後の弾にはちゃんと反応して、消えます;)
自機のフラグを消す所が、連続弾の途中にあるせいなんだろうけど。。。
当たり判定を行う部分は、関数として作って、敵弾の関数の最後で呼び出してます。
またまたわかりづらくてスミマセン;
当たり判定は出来たんです^^;
それでも、自機が弾に当たった時の処理でおかしなことに・・・
とりあえず、自機にもフラグを作って自機を表示させて、弾に当たったらフラグを消す。
という処理をさせてみたのです。
それで、単発の弾にはしっかり当たって、消えてくれるんです。
が、どうにも連続した弾を撃たれている間、
その処理が行われていない、、、?ようなんです。
(連続弾の最後の弾にはちゃんと反応して、消えます;)
自機のフラグを消す所が、連続弾の途中にあるせいなんだろうけど。。。
当たり判定を行う部分は、関数として作って、敵弾の関数の最後で呼び出してます。
またまたわかりづらくてスミマセン;
-
管理人
Re:当たり判定
当たり判定の判定方法は最初のうちはそれでいいと思います。
1、敵の出現フラグを立てる。
2、フラグがたっているなら、敵を表示する。
3、発射した弾と敵の距離を計算し、一定の距離内なら「当たり」として出現フラグを落とす。
ただそれだと毎回総当りで判定させないといけないので、少々弾や敵が増えてきた時、処理回数が増えてしまいますが、わかりやすいのはこの方法だと思います。
発射する弾が増えても、結局3を弾の数だけ繰り返せばいいので、特に問題はないように思います。
コードが無いので、問題箇所は限定出来ませんが、
しりうす~さんの仰るようにデバッグしてみてはいかがでしょうか。
VC++を使っていらっしゃるのならブレイクポイントでデバッグできますし、
デバッカが無いコンパイラならprintfDxというDXライブラリにprintfに似た関数があるので使ってみてください。
DrawFormatStringを使ってデバッグするのは少し難しいですが、一度printfDxした文字は消えないので、解りやすいと思います。
処理が一瞬で終わってよくわからないような場合はWaitTimer関数で待機させる手もあります。
1、敵の出現フラグを立てる。
2、フラグがたっているなら、敵を表示する。
3、発射した弾と敵の距離を計算し、一定の距離内なら「当たり」として出現フラグを落とす。
ただそれだと毎回総当りで判定させないといけないので、少々弾や敵が増えてきた時、処理回数が増えてしまいますが、わかりやすいのはこの方法だと思います。
発射する弾が増えても、結局3を弾の数だけ繰り返せばいいので、特に問題はないように思います。
コードが無いので、問題箇所は限定出来ませんが、
しりうす~さんの仰るようにデバッグしてみてはいかがでしょうか。
VC++を使っていらっしゃるのならブレイクポイントでデバッグできますし、
デバッカが無いコンパイラならprintfDxというDXライブラリにprintfに似た関数があるので使ってみてください。
DrawFormatStringを使ってデバッグするのは少し難しいですが、一度printfDxした文字は消えないので、解りやすいと思います。
処理が一瞬で終わってよくわからないような場合はWaitTimer関数で待機させる手もあります。