2011-02-25 4 views
1

2D 게임 (첫 번째 게임)을 만들려고합니다. 객체가 충돌하는지 여부를 결정하는 알고리즘을 찾고있는 것이 아니라 모든 것을 어떻게 구성해야 하는지를 찾는 것입니다. 나는 책임이 무엇 때문에 그렇게되어야하는지 알아 내는데 큰 어려움을 겪고 있습니다. 그래서 너무 바보 같아서. =))게임 엔티티 : 충돌 처리

내 기본 수업은 Entity (및 그 자녀)과 EntityManager입니다. Entity는 어떤 인터페이스를 제공해야합니까? 엔티티는 관리자가 각 엔티티의 함수를 전달하고 다른 엔티티의 handleCollision 함수를 전달하면 엔티티가 다른 엔티티 —과 충돌하고 있다는 것을 어떻게 인식해야합니까? 어떤 제안이라도 환영받는 것 이상입니다.

답변

2

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 위를 강력히 추천합니다. 매우 만족할 것입니다. 행운을 빕니다! :)

관련 문제