PlayerクラスとEnemy Inheritクラスのエンティティベースクラスがあります。Vectorから派生クラスのオブジェクトにアクセスする
class Entity
{
public:
virtual void Update(sf::RenderWindow &window) {};
virtual void Draw(sf::RenderWindow &window) {};
};
両プレイヤーと敵がこのようになりスプライトオブジェクトが含まれています。
class Player : Entity
{
public:
sf::Sprite sprite
void Update(sf::RenderWindow &window);
void Draw(sf::RenderWindow &window)
}
プレイヤーと敵は、次のように設定されているベクトル内に作成され
:
class EntityManager
{
public:
void CollisionCheck();
private:
std::vector<Entity*> entityVector;
}
Iこの形式の衝突検出機能を使用しようとしています:
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";
}
}
これは、次のコンパイルエラーが発生:
「クラスエンティティは、」私は「「スプライト」
という名前のメンバーを持っていません上記の方法でプレイヤーと敵のスプライトにアクセスできるように、Entityにダミースプライトを作成する方法が不明です。これは可能ですか?
私は困惑しており、誰でも手伝っていただけると大変感謝しています!
返信いただきありがとうございます!Entity内で 'Sf :: Sprite sprite'を宣言すると、コードはコンパイルされますが、アクセスしようとしているベクトルのオブジェクトのスプライトには影響しないようです。だから、 'entityVector [0] - > sprite.move(1.0)'のようなものは実際にそのスプライトには全く影響しないようです。 – Te1
これは全く別の問題です。コードを見ずに「動かす」ことはできません。私は可能な限り簡単なテストケースを得て、新しい質問を投稿することをお勧めします。 –
これはうまくいきましたが、問題は私がEntityとPlayerの両方にsf :: Spriteスプライトを宣言したことです。私がPlayerからそれを取り除くと、すべてが不平を言った。乾杯! – Te1