C++ SFML2与每个对象的碰撞

C++ SFML2与每个对象的碰撞,c++,collision-detection,game-engine,sfml,C++,Collision Detection,Game Engine,Sfml,我是SFML的初学者,我想学习碰撞。。我制作了游戏类、实体类和实体管理器来保证事情正常进行,我制作了碰撞函数来检测两个对象之间的碰撞,但我的问题是:如何检查场景中每个对象的碰撞?我是说。。我有一个从实体派生的Player类,我想测试它是否与场景中的每个实体而不是播放器的对象发生碰撞,你能帮我吗 实体.h #ifndef ENTITY_H_INCLUDED #define ENTITY_H_INCLUDED class Entity { public: Entity();

我是SFML的初学者,我想学习碰撞。。我制作了游戏类、实体类和实体管理器来保证事情正常进行,我制作了碰撞函数来检测两个对象之间的碰撞,但我的问题是:如何检查场景中每个对象的碰撞?我是说。。我有一个从实体派生的Player类,我想测试它是否与场景中的每个实体而不是播放器的对象发生碰撞,你能帮我吗

实体.h

#ifndef ENTITY_H_INCLUDED
#define ENTITY_H_INCLUDED
class Entity {
    public:
        Entity();
        ~Entity();
        virtual void Draw(sf::RenderWindow& mWindow);
        virtual void Update();
        virtual void Load(std::string file);
        virtual sf::Sprite GetEntity();
        bool IsLoaded();
        bool mIsLoaded;
        std::string mFile;
        sf::Texture mTexture;
        sf::Sprite mSprite;
};
#endif
EntityManager.h

#ifndef ENTITYMANAGER_H_INCLUDED
#define ENTITYMANAGER_H_INCLUDED
#include "Entity.h"
class EntityManager {
    public:
        void Add(std::string name, Entity* entity);
        void Remove(std::string name);
        Entity* Get(std::string name) const;
        int GetEntityCount() const;
        void DrawAll(sf::RenderWindow& mWindow);
        void UpdateAll();

    private:
        std::map <std::string, Entity*> mEntityContainer;
};
#endif
游戏

#ifndef GAME_H_INCLUDED
#define GAME_H_INCLUDED
#include "EntityManager.h"

class Game {
    public:
        static void Run();
        static void GameLoop();

    private:
        static sf::RenderWindow mWindow;
        static EntityManager mEntityManager;
};
#endif

我希望有人能理解我的意思,并给出一些建议或例子。

你能做的是循环遍历所有实体,检查它不是玩家,然后检查是否有碰撞

我猜您是在游戏类的某个地方创建了PlayerPlane对象,那么您应该保存一个指向它的指针,因为它是游戏中的一个特殊实体

然后,您可以在游戏循环中执行以下操作:

for (std::<std::string, Entity*>::iterator it = mEntityContainer.begin(); it != mEntityContainer.end(); ++it)
{
    if (it->second != pointerToPlayer)
    {
        checkCollision(it->second, pointerToPlayer);
    }
}

另一个想法是在碰撞函数中验证作为参数传递的两个实体是否具有相同的地址(不同的对象)。

非常感谢!第一次尝试就成功了!
for (std::<std::string, Entity*>::iterator it = mEntityContainer.begin(); it != mEntityContainer.end(); ++it)
{
    if (it->second != pointerToPlayer)
    {
        checkCollision(it->second, pointerToPlayer);
    }
}
for (const auto& entity : mEntityContainer)
{
    if (entity.second != pointerToPlayer)
    {
        checkCollision(it.second, pointerToPlayer);
    }
}