1

クラス Player と Enemy が継承する Entity ベースクラスがあります。プレイヤーと敵の両方に、次のようなスプライト オブジェクト (SFML API から) が含まれています。

class Player : Entity
{
   sf::Sprite sprite
}

プレイヤーと敵は、次のように設定されたベクター内に作成されます。

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'、これは非クラス型です「エンティティ*」</p>

ベクター内のこれらのクラスからコリジョン関数にスプ​​ライト オブジェクトを渡すにはどうすればよいですか?

4

1 に答える 1

1

entityVector保持されているためEntity*、適切な構文を使用する必要があります:entityVector[0]->spriteの代わりにentityVector[0].sprite.

于 2011-01-11T04:40:53.240 に答える