我正在使用Cocos2D制作一款基于网格的休闲2D iPhone游戏。网格是“交错的”六边形网格,由均匀尺寸和间隔的圆盘组成。它看起来像this。
我已将网格存储在2D数组中。我还有一个“周围”网格单元的概念。即围绕特定单元格的六个网格单元(除了边界上可能少于六个的单元格)。
无论如何,我正在测试一些碰撞检测,但它没有按照我的计划进行。以下是我目前对接近固定光盘组的移动光盘进行碰撞检测的方法:
所以这可行但不太好。我已经考虑过一种可能更简单的蛮力方法,我只是在游戏循环的每一步中将移动盘与所有固定盘进行比较。这在性能方面可能是可行的,因为固定盘数最多为300。如果没有,则可以使用一些空间分区数据结构,但感觉过于复杂。
在这样的游戏中,碰撞检测有哪些常见方法和最佳做法?
答案 0 :(得分:2)
我相信你应该能够准确地将移动光盘的xy坐标映射到最近的单元格。
+------+-------+-------+ odd rows
| | | |
| | | |
+---|--+---|---+---|----+ |
| +--|---+---|---+----|--+
| | x | | <- even rows
| +--|---+---|---+----|--+ odd rows
+---|--+---|-y-+---|----+ |
| | | |
| | | |
+------+-------+-------+
点 x 位于even_row [0] [1],而点 y 位于 在odd_row [1] [1]并且同时在even_row [0] [1]。 最多有两个地方,然后可以计算哪一个最接近。 (没有理由将偶数和奇数行保持在不同的数组中......)
您应该能够推导出将y映射到奇数行甚至行的数学公式。