Nếu một Thực thể không có 'loại' rõ ràng (ví dụ: trình phát) và chỉ đơn giản là một tập hợp các thành phần, làm cách nào để xác định các thực thể mà hệ thống của tôi nên và không nên hoạt động? Ví dụ, trong một trò chơi của Pông, mái chèo và bóng đều va chạm với các ranh giới cửa sổ. Tuy nhiên, các hệ thống xử lý va chạm cho mỗi hệ thống sẽ khác nhau, do đó một hệ thống không nên xử lý các thực thể sai loại.
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.
}
}
Cả người chơi và quả bóng đều có chung các loại thành phần có liên quan để xử lý va chạm nhưng việc triển khai hệ thống của họ sẽ khác nhau.
Nếu tôi có một thùng chứa tất cả các thực thể trò chơi, làm cách nào để xác định các loại thực thể cụ thể mà không kế thừa Entity
hoặc bao gồm một biến thành viên std::string type
, như trong trường hợp đó, một thực thể không còn đơn giản là một tập hợp các thành phần?