javascript - HTML5 - 碰撞

标签 javascript html collision

我正在开发一款自上而下的游戏,这个游戏将包含很多简单和复杂的碰撞。

经过一些研究后,我了解到我必须始终将我的 Angular 色与代码中的“对象”进行比较 - 然后检查碰撞计算。

EG:

CheckCollisions(Player, Object);

这意味着我必须将场景中的每个可碰撞对象添加到我的代码中:

CheckCollisions(Player, Building1);
CheckCollisions(Player, Building2);
CheckCollisions(Player, Trash);
CheckCollisions(Player, Bench1);
CheckCollisions(Player, Bench2);
CheckCollisions(Player, Office1);
CheckCollisions(Player, Office2);

首先,我的对象甚至可能不是简单的矩形,它们可能是复杂的形状。其次,其中一些可能有自己的轮换。第三,如果我的场景中有超过数万个可柯利对象,会发生什么?

是否有更简单的方法来检查 HTML5/JS 游戏中的冲突?

这可能吗?我真的只是在寻找一些建议和指示。

谢谢

最佳答案

为游戏中的每个对象都有一个命名变量是非常罕见的。通常,您将所有对象存储在一个数据结构(如数组)中,当您需要对所有对象执行某些操作时,您可以对该数组执行 for 循环。

一些重要的对象,例如玩家 Angular 色,可以有一个自己的变量,但它们也应该位于“所有对象”数组中,因此您不需要编写特殊的处理来包含玩家 Angular 色。

关于性能:当您对照所有内容检查所有内容时,需要执行的碰撞​​检查量会成倍增加。但是,当您仅检查那些已经彼此靠近的对象的碰撞时,您可以减少工作量。在检查碰撞之前,您:

  1. 将比赛 field 划分为矩形区域(区域必须至少与最大物体一样大)。
  2. 然后将每个对象分配到其左上角所在的区域。
  3. 然后,您获取每个区域,并检查其中每个对象与该区域中其他对象的碰撞,以及与该区域右、下和右下三个区域的所有对象的碰撞(对于与区域边界重叠的对象)。

当你有非常复杂的形状时,你还可以通过计算每个形状的边界矩形(它适合的最小可能的矩形)来加速碰撞检测。在检查两个对象之间的碰撞之前,首先检查它们的边界矩形是否相交。如果不这样做,复杂的形状就没有机会相交,您可以跳过所有复杂的计算。

关于javascript - HTML5 - 碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14565055/

相关文章:

javascript - FullCalendar - 添加事件链接

javascript - 优化 Javascript 代码

arrays - 处理中数组中的矩形碰撞检测

javascript - REST api 支持的 JavaScript 表

javascript - $watch 一个对象

java - 如何构建 HTML org.w3c.dom.Document?

html - Bootstrap - 面板组 - 不合理的间距

html - 有没有办法在 outlook.com 中为电子邮件制作背景图像而无需重复?

android - 2 条重叠线上的二维线反射

c++ - SFML 轴独立碰撞