У меня есть базовый класс MovingObject
, определенный следующим образом:
class MovingObject
{
protected:
double x;
double y;
double speed;
double damage;
double distance(double x1, double y1, double x2, double y2)
{
return sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
}
public:
MovingObject(double x, double y, double speed, double damage);
virtual bool isCollide(MovingObject* Object);
virtual void draw() {};
virtual void move() {};
};
И у меня есть 2 унаследованных класса от MovingObject
class, Zombie
и Bullet
:
class Bullet : public MovingObject
{
private:
double dirX;
double dirY;
public:
Bullet(double x, double y, double speed, double damage, double dirX, double dirY);
bool isCollide(Zombie* pZombie);
void draw();
void move();
};
class Zombie : public MovingObject
{
private:
double hpMax;
double hpCurrent;
double attackCD;
double attackRate;
public:
Zombie(double x, double y, double speed, double damage, double hpMax, double hpCurrent, double attackCD, double attackRate);
bool isCollide(Bullet* pBullet);
void draw();
void move();
void getHit();
void drawHPBar();
void decreaseAttackCD();
void refreshAttackCD();
};
Например, допустим, я хочу проверить столкновение между Bullet и Zomb ie объектами в игре. Я хочу проверить это столкновение в классе Bullet следующим образом:
bool Bullet::isCollide(Zombie* pZombie) {
if (distance(x, y, pZombie->x, pZombie->y) < 10) {
pZombie->getHit();
return true;
}
else
return false;
}
Но когда я пытаюсь получить доступ к атрибутам x
и y
класса Zombie
в Bullet
классе, я не могу получить доступ к нему. Я хочу спросить, можно ли проверить такое столкновение без использования функций getX()
и getY()
? Я считаю, что в моем мышлении есть изъян, потому что я новичок в концепциях C ++ и OOP. Я не хочу от вас полного ответа, я просто хочу, чтобы кто-то указал мне правильный путь. Заранее спасибо.