2011-02-25 70 views
1

我試圖製作2D遊戲(我的第一個)。我不是在尋找算法來確定物體是否碰撞,而是如何組織一切。我很難確定哪些職業應該承擔什麼責任,以至於我開始覺得自己很愚蠢。 =))遊戲實體:處理衝突

我猜我的主要班級是Entity(及其子女)和EntityManager。例如,實體應該提供什麼接口?實體應該如何意識到它們與另一個實體衝突—如果管理者可能更新它們並將CollisionEvent傳遞給每個實體的handleCollision函數?任何建議都比歡迎。

回答

2

我假設EntityManager包含所有實體,所以經理是需要檢查所有實體之間的collisons的人。像這樣

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,你會非常滿意。祝你好運! :)