当たり判定

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ラウ

当たり判定

#1

投稿記事 by ラウ » 18年前

初めて投稿させてもらいます、ラウと言います。

大学に入ってプログラミングを勉強し始めて半年たって、
ゲームを作りたいと思うようになり、シューティングを製作しようとして、このサイトに流れ着きました。

ここのサイトは初心者の自分にもとても分かりやすくまとめてあって、とても助かります。

今、自機と敵弾に当たり判定を作ろうとしているのですが、どうも上手くいきません。

過去ログなどにも色々書いてあったのをみたのですが^^;


三平方の定理を使って重なる部分がある場合、当たる判定をする、というのは分かるのですが・・・
自機、敵弾のそれぞれの当たり範囲を設定するところで、円の中心の設定は?という感じです。。。

分かりづらいと思いますが、アドバイスのほうよろしくお願いします。

管理人

Re:当たり判定

#2

投稿記事 by 管理人 » 18年前

こんにちは。
私も大学に入ってプログラミングを始めた一人です。
共に頑張っていきましょう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:当たり判定

#3

投稿記事 by ラウ » 18年前

お早いレスありがとうございます。m(_ _)m
管理人さんを目指して頑張りたいと思います^^

そういうことなのか・・・。
DrawRotaGraph関数について良く読んでなかったです;

今晩見直して挑戦してきます!

管理人

Re:当たり判定

#4

投稿記事 by 管理人 » 18年前

あ、間違い^^;
DrawGraph( x-50/2 , y-100/2 , img , TRUE);
引かないといけませんでしたね(_ _||)
頑張ってください★

ラウ

Re:当たり判定

#5

投稿記事 by ラウ » 18年前

また質問が出来てしまったので・・・;

当たり判定は出来たんです^^;
それでも、自機が弾に当たった時の処理でおかしなことに・・・

とりあえず、自機にもフラグを作って自機を表示させて、弾に当たったらフラグを消す。
という処理をさせてみたのです。
それで、単発の弾にはしっかり当たって、消えてくれるんです。
が、どうにも連続した弾を撃たれている間、
その処理が行われていない、、、?ようなんです。
(連続弾の最後の弾にはちゃんと反応して、消えます;)

自機のフラグを消す所が、連続弾の途中にあるせいなんだろうけど。。。

当たり判定を行う部分は、関数として作って、敵弾の関数の最後で呼び出してます。

またまたわかりづらくてスミマセン;

しりうす~

Re:当たり判定

#6

投稿記事 by しりうす~ » 18年前

>当たり判定を行う部分は、関数として作って、敵弾の関数の最後で呼び出してます。

この部分の解釈で変わってくる気がしますです。

とりあえず、当たり判定関数の中に自機に弾が当たったら”当たり”と画面に表示するようなデバッグ処理を実装して、実際に連続弾の時に最後の弾以外でも当たり判定が正常に行われているか確認してみては如何でしょうか?

管理人

Re:当たり判定

#7

投稿記事 by 管理人 » 18年前

当たり判定の判定方法は最初のうちはそれでいいと思います。

1、敵の出現フラグを立てる。
2、フラグがたっているなら、敵を表示する。
3、発射した弾と敵の距離を計算し、一定の距離内なら「当たり」として出現フラグを落とす。

ただそれだと毎回総当りで判定させないといけないので、少々弾や敵が増えてきた時、処理回数が増えてしまいますが、わかりやすいのはこの方法だと思います。

発射する弾が増えても、結局3を弾の数だけ繰り返せばいいので、特に問題はないように思います。
コードが無いので、問題箇所は限定出来ませんが、
しりうす~さんの仰るようにデバッグしてみてはいかがでしょうか。
VC++を使っていらっしゃるのならブレイクポイントでデバッグできますし、
デバッカが無いコンパイラならprintfDxというDXライブラリにprintfに似た関数があるので使ってみてください。
DrawFormatStringを使ってデバッグするのは少し難しいですが、一度printfDxした文字は消えないので、解りやすいと思います。
処理が一瞬で終わってよくわからないような場合はWaitTimer関数で待機させる手もあります。

ラウ

Re:当たり判定

#8

投稿記事 by ラウ » 18年前

そうですね、、、
まずはしりうす~さんの方法で当たり判定が動作しているか試してからやってみます。

ご回答ありがとうがとうございました^^

閉鎖

“C言語何でも質問掲示板” へ戻る