首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >碰撞跟踪

碰撞跟踪
EN

Stack Overflow用户
提问于 2019-11-23 10:43:30
回答 1查看 116关注 0票数 1

我在P5.js项目中添加了冲突,但我需要跟踪哪些对象与其他对象发生了冲突,这样我就可以为它们创建各种“关系”。

我应该把对象数据放到数组中吗?我想也许每个物体都应该追踪自己的关系.

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-23 16:52:52

我认为这取决于,您希望通过冲突系统实现什么。目前的方法更重视“容易获得每个对象的冲突”,而不是“记录所有冲突”。

这是您的方法和另一种选择:

你的方法:

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

object.relationShipList.

  • Very
  • 轻松快速地获取每个对象的所有冲突():只读取硬方法获取所有冲突的日志:获取所有冲突的日志将需要在每个对象上调用object.relationShipList并将每个冲突保存在一个新的数组中。
    • 将导致数据复制:如果多个对象发生冲突,每个对象将产生自己的冲突。H 215f 216/code>

我会选择的替代方案:

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

  • 是获取每个对象冲突的一种更复杂的方法:您需要查询window.collisionSystem才能获得冲突。这可以通过像

这样的函数来实现。

代码语言:javascript
复制
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 = [];来清除对象。

推荐阅读游戏引擎中的这个特定问题,请参阅:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59006760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档