【问题标题】:C++ Return sprite object from class in vectorC ++从向量中的类返回精灵对象
【发布时间】:2011-06-06 22:52:42
【问题描述】:

我有一个实体基类,它继承了 Player 和 Enemy 类。玩家和敌人都包含一个精灵对象(来自 SFML api),如下所示:

class Player : Entity
{
   sf::Sprite sprite
}

Player 和 Enemy 是在一个向量中创建的,向量设置如下:

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";
      }
}

但是我得到这个编译错误:

错误:在

中请求成员“sprite”

‘((EntityManager*)this)->EntityManager::entityVector.std::vector<_tp _alloc>::operator[] with _Tp = Entity*, _Alloc = std::allocator',其中 属于非类类型“Entity*”

如何将向量中这些类的精灵对象传递给碰撞函数?

【问题讨论】:

    标签: c++ sfml


    【解决方案1】:

    由于entityVector 包含Entity*,您需要使用正确的语法:entityVector[0]-&gt;sprite 而不是entityVector[0].sprite

    【讨论】:

    • 我现在遇到了“错误:'class Entity'没有名为'sprite'的成员'以前我有'Class Entity {Sf::Sprite sprite}'的问题,所以我的代码会编译,但这意味着继承对象的精灵从未被访问过。我不确定如何在 Entity 中创建一个虚拟精灵,以便上述方法有效?
    • sf::Sprite 是 SFML api 的一个类,所以我不确定如何使它成为实体基类的成员。不过,您的评论确实有道理,非常感谢。
    • class Entity{sf::Sprite sprite;}; class Player : public Entity{};
    • 效果很好,问题是我在实体和播放器中都有 Sf:Sprite sprite。一旦我从播放器中删除它就可以了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    相关资源
    最近更新 更多