游戏实体:处理碰撞

我正在尝试制作2D游戏(我的第一个游戏)。我不是在寻找算法来确定物体是否发生碰撞,而是我应该如何组织一切。我很难弄清楚应该对哪个课程负责,以至于我开始感到愚蠢。 =)) 我想我的主要课程是
Entity
(及其子女)和
EntityManager
。例如,实体应该提供什么接口?实体应该如何意识到他们与另一个实体发生冲突—经理是否应该更新它们并将
CollisionEvent
传递给每个实体的
handleCollision
函数?任何建议都受到欢迎。     
已邀请:
我假设EntityManager包含所有实体,因此管理员是需要检查所有实体之间的冲突的人。像这样
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,你会对它非常满意。祝好运! :)     

要回复问题请先登录注册