所以我的问题不是关于碰撞检测的方法,而是更广泛的"什么代码应该拥有碰撞检测".我以前写了一些游戏(相对简单的2D Flash游戏),它让我想到哪些代码应该拥有碰撞检测?
让我澄清一下 - 比如在游戏中我有一群敌人和一群玩家射击的射弹.所以在过去我曾经说过一个EnemyManager类,每一帧都会更新敌人的位置,同样对于玩家来说,弹丸有一个在子弹周围移动的PlayerProjectilesManager类.这很酷 - 一切都很好,花花公子.但是,我决定我想让子弹影响敌人(我知道疯了!).所以这意味着我需要在代码中的某个地方:
因此,基本上我过去所做的只是让EnemyManager类获取碰撞的"所有权",并且在其更新循环期间它找到与敌人子弹碰撞的玩家子弹(即步骤1)并且还调用两者的代码处理碰撞的物体(例如敌人失去健康,子弹消失)(即步骤2).所以我已经控制了对EnemyManager的碰撞检测和碰撞"反应".
几个评论:
在我脑海中形成的是管理碰撞检测的第三方实体.例如,有一个CollisionManager,其代码可以知道其他管理者需要检测到的冲突.这导致了其他一些问题,比如"管理者"需要暴露哪些接口以进行有效的碰撞检测,而不会向CollisionManager暴露太多内部结构.然后我想CollisionManager是什么广播某种事件,包含哪两个对象碰撞等......也许EnemyManager/PlayerProjectilesManager可以分别监听这些事件并做出相应的反应和分开.开始在我的脑海里有意义.:)
思考?几乎每场比赛都有碰撞检测,所以我相信之前已经讨论过了.:)