我在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);
}发布于 2019-11-23 16:52:52
我认为这取决于,您希望通过冲突系统实现什么。目前的方法更重视“容易获得每个对象的冲突”,而不是“记录所有冲突”。
这是您的方法和另一种选择:
你的方法:
每一次碰撞都被推入碰撞对象的object.relationShipList中。
object.relationShipList.
object.relationShipList并将每个冲突保存在一个新的数组中。H 215f 216/code>我会选择的替代方案:
每一次碰撞都被推入一个全局数组。当对象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://stackoverflow.com/questions/59006760
复制相似问题