最近,我一直在研究快节奏的2D射击游戏,但遇到了一个大问题。碰撞检测。当然可以,但是速度很慢。我的目标是:屏幕上有很多敌人,并且让他们彼此不接触。所有的敌人都在追逐玩家实体。他们中大多数人或多或少都拥有相同的速度,所以迟早他们都在追逐玩家时占据了相同的空间。这确实降低了娱乐性,因为对于玩家而言,似乎您只被一个敌人追赶。为了防止它们占据相同的空间,我添加了一个碰撞检测(一种非常基本的2D检测,这是我所知道的唯一方法)。
Enemy class update method
Loop through all enemies (continue; if the loop points at this object)
If enemy object intersects with this object
Push enemy object away from this enemy object
这很好。只要我只有<200个敌方实体。当我靠近300-350个敌方实体时,我的帧频开始大幅下降。首先,我认为渲染效果很差,因此我取消了他们的平局。这一点都没有帮助,所以我当然意识到这是更新方法。它们更新方法中唯一重要的部分是每个敌人循环通过每个敌人的部分。当我接近300个敌人时,游戏会执行90000(300x300)步发信号。我的我的〜
我确信必须有另一种方法来解决这种冲突检测。虽然我不知道如何。我发现的页面涉及如何实际执行两个对象之间的碰撞或如何检查对象与图块之间的碰撞。我已经知道这两件事。
tl; dr?如何在实体的LOTS之间进行冲突检测?
快速编辑:如果有任何帮助,我正在使用C#XNA。