0

另一个关于类的问题,因为我是 OOP 的新手。我创造一个游戏只是为了好玩。它是一个自上而下的射击游戏,太空射击游戏。

我有几个不同的课程:

Bullet(子弹坐标列表)、Player(玩家精灵、位置等)、Enemy(敌人精灵、位置等)、Collision(获取坐标 Ax、Ay 和 Bx,通过查看它们是否发生碰撞)

如何将 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、Enemy 和 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

您通常必须遍历每个敌人并根据您的玩家坐标检查该敌人的坐标。
我确定您将这些敌人存放在某个地方,最好是在一个容器中,例如std::vector. 现在让我假设你正是这样做的:

// 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 回答