冲突跟踪

问题描述 投票:1回答:1

我正在P5.js项目中添加碰撞,但是我需要以某种方式跟踪哪些对象与其他对象发生碰撞,以便为它们创建各种“关系”。

我应该将对象数据放入数组中吗?我想也许每个对象都应该跟踪它自己的关系...

crossPaths(other) {
    let d = dist(this.pos.x,this.pos.y,other.pos.x,other.pos.y);
    d < (this.size/2 + other.size/2) ? true : false;
}

createRelationship(other) {
    this.relationShip = other;
    this.relationShipList.push(this.relationShip);
}
javascript object collision
1个回答
1
投票

我认为这取决于您希望通过碰撞系统实现的目标。当前方法更加重视“轻松获得每个对象的碰撞”,而不是“保留所有碰撞的日志”

这是您的方法和替代方法:

您的方法:

每次碰撞都被推入碰撞对象的object.relationShipList

  • 获取所有冲突的简便方法每个对象:仅读取object.relationShipList
  • 获取所有冲突的日志的非常困难的方法:获取所有冲突的日志将需要调用object.relationShipList 在每个对象上,并将每个冲突保存在新数组中。
  • 将导致数据重复:如果有多个对象碰撞,则每个对象将产生自己的碰撞。
  • 或者我会选择:

每个碰撞都被推入全局数组。当对象a与对象b碰撞时,您将注册一个window.collisionSystem.push([a, b])

  • 获取每个对象冲突的方法稍微复杂一点:您需要查询window.collisionSystem才能获取冲突。可以通过类似的功能来实现
function getCollisionsFor(ob) {
  return window.collisionSystem.filter(e => {
    if (e[0] === ob || e[1] === ob) return true;
  })
}

然后像getCollisionsFor([objectIWant])那样调用它以获取objectIWant对象的新碰撞数组。

© www.soinside.com 2019 - 2024. All rights reserved.