엔터티에 명시적인 '유형'(예 : 플레이어)이없고 단순히 구성 요소 모음 인 경우 시스템에서 작업하지 않아야하는 엔터티를 어떻게 식별합니까? 예를 들어, Pong 게임에서 패들과 공은 모두 창 경계와 충돌합니다. 그러나 각각의 충돌 처리 시스템은 다르므로 시스템이 잘못된 유형의 엔티티를 처리해서는 안됩니다.
void PlayerCollisionSystem::update(std::vector<Entity *> entities) {
typedef std::vector<Entity *>::iterator EIter;
for (EIter i = entities.begin(); i != entities.end(); ++i) {
Entity *player = *i; // How do I verify that the entity is a player?
// Get relevant components.
PositionComponent *position = player->getComponent<PositionComponent>();
VelocityComponent *velocity = player->getComponent<VelocityComponent>();
SpriteComponent *sprite = player->getComponent<SpriteComponent>();
// Detect and handle player collisions using the components.
}
}
플레이어와 볼 모두 충돌 처리에 대해 동일한 관련 구성 요소 유형을 공유하지만 시스템 구현은 다릅니다.
모든 게임 엔터티의 컨테이너가 있는 경우 Entity
와 같은 멤버 변수 를 상속 하거나 포함 하지 않고 특정 유형의 엔터티 를 식별하려면 어떻게해야std::string type
합니까?