碰撞追踪
Collision tracking
我正在 P5.js 项目中添加碰撞,但我需要以某种方式跟踪哪些对象与其他对象发生碰撞,以便我可以为它们创建各种 "relationships"。
我是否应该将对象数据放入数组中?我想也许每个对象都应该跟踪它自己的关系...
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);
}
我认为这取决于你想用碰撞系统实现什么。当前的方法更重视 "easily get collisions per object" 而不是 "keep a log of all collisions".
这是您的方法和替代方法:
你的方法:
每次碰撞都被推入碰撞对象的 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
对象的新碰撞数组。
- 在没有重复数据的情况下跟踪所有碰撞的简单方法:这是-当然-
window.collisionsSystem
数组。
- 修剪数据的简单方法:只需
window.collisionSystem = [];
清理对象。
我正在 P5.js 项目中添加碰撞,但我需要以某种方式跟踪哪些对象与其他对象发生碰撞,以便我可以为它们创建各种 "relationships"。
我是否应该将对象数据放入数组中?我想也许每个对象都应该跟踪它自己的关系...
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);
}
我认为这取决于你想用碰撞系统实现什么。当前的方法更重视 "easily get collisions per object" 而不是 "keep a log of all collisions".
这是您的方法和替代方法:
你的方法:
每次碰撞都被推入碰撞对象的 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
对象的新碰撞数组。
- 在没有重复数据的情况下跟踪所有碰撞的简单方法:这是-当然-
window.collisionsSystem
数组。 - 修剪数据的简单方法:只需
window.collisionSystem = [];
清理对象。