关于课程的另一个问题是我对OOP的新手。我正在创造一个只是为了好玩的游戏。它是一名自上而下的射击游戏,太空射击游戏。
我有几个不同的类:
子弹(子弹坐标列表), 玩家(玩家精灵,位置等), 敌人(敌人精灵,位置等), 碰撞(取坐标Ax,Ay和Bx,看看它们是否相撞)
如何将Bullet,Enemy的坐标发送到Collision类以查看它们是否发生碰撞?
Collision col
col.collision(ax, ay, bx, by) //how can I get the Player and Bullet pos?
答案 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
成为一个自由函数并完成它。 :)