在类C ++之间共享变量?

时间:2011-04-15 15:13:00

标签: c++ class variables projectile

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

我有几个不同的类:

子弹(子弹坐标列表), 玩家(玩家精灵,位置等), 敌人(敌人精灵,位置等), 碰撞(取坐标Ax,Ay和Bx,看看它们是否相撞)

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

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

3 个答案:

答案 0 :(得分:5)

您可能想要做的是拥有一个具有位置的公共类“SceneObject”。然后Player,Enemy和Bullet都从该类继承。

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

答案 1 :(得分:1)

我会为Bullet,Enemy(也许是玩家)创建一个基类。我们称之为Object,Object将拥有Coordinates,并且会有一个确定碰撞是否发生的函数。

在代码中,它看起来像是:

class Object 
{
    private:
        Coord position; 

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

答案 2 :(得分: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成为一个自由函数并完成它。 :)