gpt4 book ai didi

c++ - 从 Vector 访问派生类中的对象

转载 作者:行者123 更新时间:2023-11-28 01:08:48 24 4
gpt4 key购买 nike

我有一个实体基类,Player 和 Enemy 类继承了它。

class Entity
{
public:

virtual void Update(sf::RenderWindow &window) {};
virtual void Draw(sf::RenderWindow &window) {};

};

玩家和敌人都包含一个如下所示的 Sprite 对象:

class Player : Entity
{
public:

sf::Sprite sprite

void Update(sf::RenderWindow &window);
void Draw(sf::RenderWindow &window)
}

玩家和敌人是在一个 vector 中创建的, vector 是这样设置的:

class EntityManager
{
public:
void CollisionCheck();
private:
std::vector<Entity*> entityVector;
}

我希望使用这种形式的碰撞检测功能:

bool Collision::CircleTest(const sf::Sprite& Object1, const sf::Sprite& Object2)

所以我正在尝试做这样的事情:

void EntityManager::ColCheck()
{
if (Collision::CircleTest(entityVector[0]->sprite, entityVector[1]->sprite))
{
cout << "COLLISION\n";
}
}

这会导致以下编译错误:

‘class Entity’没有名为‘sprite’的成员

我不确定如何在 Entity 中创建虚拟 Sprite ,以便我可以使用上述方法访问玩家和敌人 Sprite 。这可能吗?

我很困惑,非常感谢任何人可以提供的帮助!

最佳答案

如果代码中派生自 Entity 的所有内容都有一个 sprite 对象,那么您应该在基类中声明该对象。

不在基类中声明对象意味着可能有一个继承自 Entity 的类没有 sprite 对象,这意味着 ColCheck 没有有效的假设 entityVector 的元素指向具有名为 sprite 的变量的对象的基础。有道理吗?

关于c++ - 从 Vector 访问派生类中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4654701/

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