Javascript 碰撞跟踪
我在一个P5.js项目中添加了碰撞,但我需要以某种方式跟踪哪些对象与其他对象发生了碰撞,以便为它们创建各种“关系” 我是否应该将对象数据放入数组中?我想也许每个物体都应该追踪它自己的关系Javascript 碰撞跟踪,javascript,object,collision,Javascript,Object,Collision,我在一个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; } createRelati
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);
}
交叉路径(其他){
设d=dist(这个位置x,这个位置y,其他位置x,其他位置y);
d<(this.size/2+other.size/2)?真:假;
}
创建关系(其他){
这个关系=其他;
this.relationShipList.push(this.relationShip);
}
我认为这取决于你想用碰撞系统实现什么。当前的方法更重视“容易获得每个对象的碰撞”,而不是“记录所有碰撞”
以下是您的方法和备选方案:
你的做法:
每次碰撞都会被推送到对象中。碰撞对象的relationShipList
- 获取每个对象的所有冲突的简便快捷方法:仅读取对象。关系列表
- 获取所有冲突的日志非常困难:获取所有冲突的日志需要对每个对象调用
,并将每个冲突保存在新数组中object.relationShipList
- 将导致数据重复:如果有多个对象发生碰撞,每个对象将生成自己的碰撞
a
与对象b
发生冲突时,您注册一个窗口.collisionSystem.push([a,b])
- 获取每个对象的碰撞的更复杂的方法是:您需要查询
来获取碰撞。这可以通过以下功能实现window.collisionSystem
ObjectWant
对象获取一个新的冲突数组
- 无需重复数据即可跟踪所有冲突的简单方法:当然,这是
数组窗口.collisionsystem
- 修剪数据的简单方法:只需
window.collisionSystem=[]代码>以清除对象
推荐阅读游戏引擎中有关此特定问题的书籍,请参阅:谢谢。我已经试着去推数组了,但是因为冲突/重叠发生了好几毫秒,所以这些对被一次又一次地添加。我现在正在尝试一个版本,使用pairs作为对象,首先检查数组以确保尚未添加它们。
function getCollisionsFor(ob) {
return window.collisionSystem.filter(e => {
if (e[0] === ob || e[1] === ob) return true;
})
}