0

我目前正在编写我的第一个游戏,并在 Javascript+HTML5 Canvas 中进行。该游戏是一款带有 WASD 动作的自上而下的点击动作射击游戏。无论如何,昨天我完成了使用圆和四叉树实现碰撞检测以最小化比较。我把所有的子弹、玩家和敌人都扔进了四叉树。现在,一切正常,但我不确定如何处理下一步,即处理实际级别的碰撞。子弹应该被墙壁挡住,演员(玩家和敌人)应该被栅栏和墙壁挡住,等等。

我是否应该定义形状来表示我的关卡的墙壁并将它们作为对象形式包含在四叉树中,然后使用 SAT 来评估每个元素与它可能发生碰撞的任何事物,或者是否有其他方法,例如创建隐藏图像概述路径的图层,然后测试每个对象的坐标以确保它不会落在黑色像素上(这表明它正在与不动的地形相撞)?

谢谢。

4

1 回答 1

0

从一个类似的问题:

我建议阅读这篇关于幽灵移动和碰撞检测如何在PacMan中工作的优秀文章。

然后我建议在逻辑上将您的炸弹人关卡建模为一组图块。每个图块代表您关卡中的一个离散位置,从逻辑上讲,不可能永远处于“之间”图块或同时占据两个图块。每个图块都可以跟踪当前在其上的地形特征,以及它是否是玩家(以及敌人)的有效目的地图块,如果允许敌人穿越通常无法通过的地形,则每个图块可能具有不同的规则为玩家)。

那么你就不需要为世界上的每个物体都使用碰撞检测算法了。当敌人需要移动时,或者当用户试图移动他们的角色时,您所要做的就是检查与其当前图块相邻的所有图块(如果允许对角线移动,最多 4 个或 8 个),查看每个图块是否代表一个有效的移动方向,如果它不是一个有效的方向,则阻止移动。

为了回答你的问题,是的,在每次位置更新时迭代世界上的每个对象都是非常低效的。

于 2012-04-29T20:43:30.447 回答