所以我的身体是对撞机
有时速度很大
问题是边界的平铺地图是由小瓷砖组成的
身体以高速度穿过它
这是我所有机构的配置:
const config = {
inertia: Infinity, // do not spin
friction: 0, // X*100% stop on hit
frictionAir: 0, // X*100% slow on move
restitution: 0.5, // bounce X*100% on hit
collisionFilter: this.level.getCollisionFilter(), // default collision filter
isStatic
}
...
getCollisionFilter (key = null) {
switch (key) {
case 'fly':
return {
category: 0x0008,
mask: 0xFFFFFFF1,
group: -1
}
case 'items':
return {
category: 0x0004,
mask: 0xFFFFFFF1,
group: -1
}
case 'woda':
return {
category: 0x0002,
mask: 0xFFFFFFFF,
group: -1
}
default:
return {
category: 0x0001,
mask: 0xFFFFFFFF,
group: 0
}
}
}
```
woda
的含义是water
这是默认值和woda
答案 0 :(得分:1)
问题在于您使用的something.js没有连续的冲突检测。几年来一直是feature request。现在,这并不意味着您无能为力。问题说明本身包含一些代码,这可能是通过矩形边界解决问题的最便宜的方法:
它会检测一个物体是否在世界范围之外,然后反转速度并向后平移该物体
或者,此post提供了一些想法。
如果您想自己实现某些功能,我将尝试解释连续碰撞检测算法。
基本上,对于场景中的每个运动物体,您都必须计算帧0<t0<1
的一部分内的下一个碰撞时刻,然后将位置提前到帧t0
的这一时刻,更新速度进行碰撞,然后继续进行下一次碰撞t0<t1<1
,直到到达tn=1
(帧结束)的时间为止,请确保您不会由于四舍五入而陷入帧中间计算或“转角”对象。对于球形对撞机,通常通过使用capsule vs capsule(对于对象对)相交,并使用capsule vs box作为边界来完成。
您也可以通过以较低的速度隐藏多个隐藏帧来作弊:
好运相撞!