0

OOPが初めてなので、クラスに関するさらに別の質問。趣味でゲームを作っています。そのトップ ダウン シューティング、スペース シューティング ゲーム。

私はいくつかの異なるクラスを持っています:

Bullet (弾丸の座標のリスト)、Player (プレイヤーのスプライト、位置など)、Enemy (敵のスプライト、位置など)、Collision (座標 Ax、Ay、Bx、By を取得して、それらが衝突したかどうかを確認します)

Bullet、Enemy から Collision クラスに座標を送信して、衝突したかどうかを確認するにはどうすればよいですか?

Collision col
col.collision(ax, ay, bx, by) //how can I get the Player and Bullet pos?
4

3 に答える 3

5

おそらくやりたいことは、位置を持つ共通クラス「SceneObject」を持つことです。次に、Player、Enem、Bullet はすべてそのクラスを継承します。

あなたの衝突は、プレイヤー、敵などについての知識を必要としませんが、位置を持つシーンオブジェクトのみを必要とします。基本クラスに、位置を返す Getter メソッドを記述できます。

于 2011-04-15T15:17:40.423 に答える
1

Bullet、Enemy (およびおそらく Player) の基本クラスを作成します。それをオブジェクトと呼びましょう。オブジェクトは座標を所有し、衝突が発生したかどうかを判断する関数を持ちます。

コードでは、次のようになります。

class Object 
{
    private:
        Coord position; 

    public:
        bool Collide(const Object& otherObject) const;
};
于 2011-04-15T15:27:27.917 に答える
0

You typically have to go through every enemy and check the coordinates of that enemy against your player coordinates.
I'm sure you stored those enemies somewhere, preferably in a container like std::vector. Now let me just assume you did exactly that:

// somewhere in a 'Game' class
std::vector<Enemy> myEnemies;
Player myPlayer;
Collision col;

for(int i=0; i < myEnemies.size(); ++i){
  col.collision(myPlayer.getX(), myPlayer.getY(), myEnemies[i].getX(), myEnemies[i].getY())
}

以上です。:) 弾丸や同様のオブジェクトについても同じことを行います。それらをすべてコンテナに保存し、そのコンテナを繰り返し処理して、オブジェクトの位置を確認します。
別のヒントとして、クラスにメソッドのみが含まれ、変数が含まれていない場合は、その関数をフリーにすることもできます。プロジェクトの一部で OOP を使用しているからといって、どこでも使用する必要はありません。それcollisionを無料の機能にして、それで完了します。:)

于 2011-04-15T15:23:22.770 に答える