2011-04-15 136 views
0

还有另一个关于类别为OOP新的问题。我创造一个游戏只是为了好玩。它是一个自上而下的射手,太空射手。在类C++之间共享变量?

我有几个不同的类别:

子弹(子弹坐标的列表), 玩家(玩家精灵,位置等), 敌人(敌人的精灵,位置等), 碰撞(以坐标斧,Ay和Bx,通过以查看它们是否发生了碰撞)

如何将Bullet,Enemy的坐标发送到Collision类以查看它们是否发生了碰撞?

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

回答

5

也许你想要做的是有一个共同的类“场景对象”,有一个位置。然后玩家,敌人和子弹都从该类继承。

你的碰撞然后不需要关于玩家,敌人等的知识,但只需要有位置的场景物体。你可以在你的基类中写一个返回位置的Getter方法。

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免费的功能,并完成它。 :)

1

我会为子弹,敌人(也许是玩家)创建一个基类。我们称之为对象和对象将拥有坐标,并且会有一个函数来确定碰撞是否发生。

在代码它看起来像到以下几点:

class Object 
{ 
    private: 
     Coord position; 

    public: 
     bool Collide(const Object& otherObject) const; 
};