gpt4 book ai didi

c++ - 为从同一基类派生的类实现冲突检查

转载 作者:行者123 更新时间:2023-12-01 14:22:48 24 4
gpt4 key购买 nike

我有一个基类 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() {};
};

我从 MovingObject 继承了 2 个类类(class), ZombieBullet :
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 和 Zombie 对象之间的碰撞。我想在 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 概念还很陌生。我不想从你那里得到完整的回答,我只想有人为我指出正确的道路。先谢谢了。

最佳答案

Bullet 不能访问 Zobmbies 保护的成员,因为它不是从 Zombie 派生的。如果您只需要对 x 和 y 进行读取访问,则需要在移动对象类中使用常量 getter。

class MovingObject
{
public:
double GetX() const { return x; }
double GetY() const { return y; }
protected:
...
};

然后在 Bullet::isCollide() 中使用它们
if (distance(x, y, pZombie->GetX(), pZombie->GetY()) < 10) {
pZombie->getHit();
return true;
}

请避免使用 friend 。随着越来越多的子类,您将不得不让它们成为 friend 。

关于c++ - 为从同一基类派生的类实现冲突检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62100462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com