检查碰撞对象JS

时间:2017-04-27 14:30:29

标签: javascript object collision-detection collision

我一直在使用数组allShapes。此数组由具有相同类型属性的对象组成,例如每个对象具有.x值和.y值。

每个形状都有“半径”,因此可以轻松完成检测。对于每个对象,半径完全相同。它等于10。

如何有效地制作检查一个形状是否与另一个形状碰撞的功能?提前谢谢!

var allShapes = [{70,30},{40,90},{287,245}];
// allShapes[0].x = 70
// For each object, there is a .x and .y value

2 个答案:

答案 0 :(得分:2)

如果天真的O(n ^ 2)解决方案(使用所有其他对象测试每个对象)效率不高,请选择一种众所周知的空间分区算法。有kd树,八叉树,四叉树,BSP树等。 也许你应该从简单的网格开始。将您的域划分为单元格并按单元格排序对象。对于给定的候选者,测试相同和所有相邻单元格中的所有对象。

答案 1 :(得分:1)

var allShapes = [{70,30},{40,90},{287,245}];

for(let i = 0; i < allShapes.length - 1; i++) {
  for(let j = i + 1; j < allShapes.length; j++) {
    //check if allShapes[i] and allShapes[j] are colliding
  }
}

检测细分:

- allShapes[i] = {70,30}
  - allShapes[j] = {40,90} => check collision
  - allShapes[j] = {287,245} => check collision
- allShapes[i] = {40,90}
  - allShapes[j] = {287,245} => check collision