質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

2回答

1600閲覧

オブジェクト指向でゲームなどを作る際の当たり判定の配置場所の相談

nekmata9bi

総合スコア1

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

0クリップ

投稿2021/05/18 01:00

直接プログラム言語に関わる質問ではなくて大変恐縮なのですがどうか教えてください。

シューティングゲームでも、3Dのアクションゲームなどでもいいのですが、表題の通り、当たり判定をどこに持たせるべきかに悩んでいます。

シューティングゲームなら弾、アクションゲームなら武器など、攻撃する側に接触判定を持たせて、そこでダメージ数を相手に渡す方がいいのか、
あるいは敵や自キャラクターなど、攻撃を受ける側に接触判定を持たせて、そこで接触した対象のダメージ数の呼び起こしをするべきなのか、
どちらが処理への負担が少ないかがいまいちピンときません。

攻撃方法(弾や武器の種類など)によってダメージ数が異なるので前者のほうがいいのかなと思ったのですが、落ち着いて考えたらそもそもキャラクターも複数発生する以上、キャラクター側に持たせた方がいろいろ便利なのかなとも思い始めました。

もっとも、言語によっても動きは異なるのでしょうが、いままで見てきた現場だとこっちが多かった、こっちのほうがメモリ占有量が少ないなどのアドバイスを頂けると嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

もっとも、言語によっても動きは異なるのでしょうが、いままで見てきた現場だとこっちが多かった、こっちのほうがメモリ占有量が少ないなどのアドバイスを頂けると嬉しいです。

どのようにオブジェクト指向を使って組んでいるかにもよると思います。
自機、敵、弾と別々にクラスを組んでいるなら、それらをまとめてインスタンスしているクラスで処理を行うのが一番わかりやすいと思います。
しっかりと設計を行っているのであれば、親クラスをインスタンスしているクラス内で衝突判定を行い、子クラスへと通知してあげる方法が一番いいかと思います。

それと、ひとえに衝突判定と言ってもAABBやOBB、球やカプセルといった形状の違う判定まで含まれるので、明確な答えを求めると物凄い議論に発展すると思います。

投稿2021/05/18 05:14

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

どちらがやる、ではなくて、どちらでも処理がある、のではないでしょうか。

例えば弾と物体が衝突した際で考えると、弾は与えるダメージの質と量を対象オブジェクトに通知し、それに対して対象オブジェクトの方はそれによって受けるダメージを計算(質によっては全部跳ね返す可能性もあり)、自分が耐えられないなら爆散し(場合によっては弾が貫通してさらに後方のオブジェクトへ衝突するかも知れない)、耐えたならダメージに応じた挙動の変化をする、など、考えられます。
ダメージを与えることを、ダメージのメッセージをやり取りする、ととらえるわけです。

投稿2021/05/18 04:27

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekmata9bi

2021/05/18 09:28

回答ありがとうございます。 私の文章力が拙く伝わりにくかったようで申し訳ございません。 今回お伺いしたかったのは、ダメージ処理がメインというよりは、トリガーとなる接触判定をどちらに持たせるべきかが聞きたかったのです。 設計によってはダメージ量や防御力などの呼び出しや計算などの各処理はもちろんあるでしょうが、そもそもとして接触したかどうかの判定はどちらに持たせるのがいいのかなと疑問に思った次第です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問