碰撞追踪

数学的

我在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);
}
阿德里奥圣地亚哥

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

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

您的方法:

每次碰撞都被推入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

  • 简单的方法来跟踪所有的碰撞没有重复的数据:这是-of课程-window.collisionsSystem阵列。
  • 修剪数据的简单方法:只是window.collisionSystem = [];清除对象。

推荐阅读有关游戏引擎这个特殊的问题,请参见:https://books.google.com/books?id=EwlpDwAAQBAJ&pg=PT726&lpg=PT726&dq=havok+collision+tracking&source=bl&ots=Eav72q2T95&sig=ACfU3U15UvAqvf4FmjYKOAsm1CPMlyaFQA&hl=en&sa=X&ved=2ahUKEwi559zSgJDmAhXHnuAKHQv0ATAQ6AEwCXoECAwQAQ# v = onepage&q = havok%20collision%20tracking&f = false

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章