是box2d吧?估计无解。锁了旋转它计算contact法线应该会有问题。
有几种方法:
1,不锁rotation
2,用kinematic刚体,将球写成子弹,每帧向运动方向发射射线,射线长度为 运动速度*时间(s * deltaTime)
,射中后得到normal后,计算reflect(dir, normal)
得到弹射后的方向,并更新运动方向,最后速度 *= 衰减系数
,就可以了。但是用box2d不建议这样做,因为没有sweep test世界查询所以不太好处理与球相交的测试,并且自己计算球之间的力也不是很方便。
锁rotation是出于什么考虑呢?
锁rotation是因为球下面加了阴影,而且阴影又是不居中的,偏右下角
这个很简单了。写个世界坐标的跟随阴影不就好了嘛。不作为球的子级。
class ShadwoCom extends Compoent {
@property(Node)
target: Node;
@property(Vec3)
offset: Vec3;
private _p = v3();
update() {
this._p.set(this.target.worldPosition).add(this.offset);
this.ndoe.setWorldPosition(this._p);
}
}
把要跟随的球拖到target上,然后填一下跟踪时的偏移值offset,就行了。