2 番目のケースを実装する唯一のポイントは、オブジェクトにならずに Collidable から派生させたい場合ですか? その場合、2 番目のケースの方が柔軟性が高いため、1 番目のケースが有利になるのはいつですか。
両方の衝突可能オブジェクトには純粋な仮想関数しかなく、Object は画面上に描画できるオブジェクトの基本クラスです (私の場合)。
^次のコードを正しく理解していると仮定します (よくわかりません TBH)
class Object
class CollidableObject : Object
class Actor : public CollidableObject
class Object
class Collidable
class Actor : public Object, public Collidable
編集:
マット/セスに基づく
class Object
class Collidable
class Clickable
class Trackable
class BlowUppable
class Actor : public Object, public Collidable, public Clickable, public Trackable,
public BlowUppable
class SomeObjectThatIsTakenForGrantedThatEverythingElseIsInherited : public Actor
最初の例は 2 番目のケースで、2 番目の例は最初のケースです。それが最初のケースで私が目にする唯一の用途だと思います。
@Luchian
あなたの返信はどちらでもないので、これは元の質問とは別の質問になります。
この場合、オブジェクトを is-a 関係から has-a 関係に変更することに違いはありますか? いずれの場合も、衝突をチェックするには、衝突をチェックする必要があるかどうかを知るフラグがオブジェクトに必要です。あなたの場合、メンバーがnullかどうかを確認できますが、派生した場合、オブジェクト自体が衝突できるかどうかを示します。配列/ツリーでは、派生オブジェクトを引数として渡すか、get() メソッドを使用してヒットボックスを引数として渡すことができます。
さらに詳しく説明するために、別のクラスがあります-2番目のケースを使用します
class Hitbox : public Object, public Collidable
そしてActorクラスはそれをメンバーとして持っています
class Actor : public Object
{
Hitbox *box;
};
衝突のあるオブジェクトには代わりにヒットボックスがあり、これはあなたの投稿を正確に表していると思います。しかし、まだ私が得ているのは、あなたの例をもう一度確認するとき、代わりに Hitbox に Collidable メンバーが必要であることを意味しますか?
class Hitbox
{
Collidable *collision;
};
私が持っているもの:
アクターは衝突を処理する Hitbox を保持しています
Hitbox のすべきこと:
Collidable を継承するか
、メンバーとして Collidable を持っている
アクターはすでにあなたの規則に従っています。ヒットボックスも同じことをすべきですか?