EntityManager에 모든 엔티티가 포함되어있어 관리자가 모든 엔티티 사이에서 콜리 손을 확인해야하는 관리자라고 가정합니다. like
for(int i = 0 ; i < totalEntities ; ++i)
for(int j = i+1 ; j < totalEntities ; ++j)
{
CollisionInfo info;
if(CheckCollision(entities[i], entities[j], info))
{
// Okay, what we should do? I suggest two solutions
// 1. simple one
entities[i].OnCollide(info);
entities[j].OnCollide(info);
// 2. event-or-message driven system
EventManager::Instance()->SendEvent(COLLISION_EVENT, info)
}
}
첫 번째 것은 아마도 가장 단순한 것일 수 있습니다. 그러나이 충돌 이벤트에 관심이있는 다른 객체가 있다면 어떻게 될까요? 로깅이나 스코어링 시스템과 같은 사운드? 충돌과 관련이없는 엔티티조차도이 이벤트를 "알기"때문에 행동을 바꿀 수 있습니다. (보스 몬스터는 아이들이 당신에 의해 죽을 때 더 화가 난다고 생각하십시오!)
그래서 좀 더 유연하게 만들기 위해 # 2가 왔습니다. 먼저 객체가 처리하려는 특정 메시지를 구독 할 수있는 자신의 event-or-message system
(Windows 메시지 시스템이라고 생각할 수 있음)이 필요합니다. 그런 다음 EntityManager는 메시지를 보내 충돌 이벤트를 전달할 수 있습니다. 엔티티는이 충돌 메시지 유형을 구독 할 수 있으며 정보를 검사하여 이러한 특정 충돌을 처리해야 하는지를 알아야합니다. 마찬가지로, 득점 시스템이 그것을 구독하고 새로운 점수를 계산할 수 있습니다.
게임이 간단하면 1 위를 차지할 수 있지만 2 위를 강력히 추천합니다. 매우 만족할 것입니다. 행운을 빕니다! :)