如果实体没有显式的“类型”(例如播放器),而仅仅是组件的集合,那么我如何识别系统应该和不应该使用的实体?例如,在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
情况下识别特定类型的实体,在这种情况下,实体不再仅仅是组件的集合?