[LayaAirIDE 2.0]两个物体发生碰撞的时候,如何让他检测碰撞点的位置

类似于当一个移动的球碰底部挡板的时候,如何判断他碰撞到的是中心点还是两边点,因为碰撞到中心点的时候我会让他直线弹回去,而碰到两边的时候我会让他斜线弹回去
QQ截图20201114093305.png
已邀请:

ggxxyy

赞同来自:

如果使用的是默认的物理引擎box2d,在碰撞事件监听函数里可以从第3个参数获取到碰撞信息,如:
ColliderHandler(a:Collider, b:Collider, c:b2Contact)
可通过b2Contact.GetManifold()方法获取到碰撞点相对于碰撞物体的本地坐标,
还可通过b2Contact.GetWorldManifold()方法获取到碰撞点的全局坐标,
具体实现请参考box2d手册,可参考:http://www.ladeng6666.com/blog/?p=653

我实测GetWorldManifold时老报错,尝试以下方法也取到了碰撞点全局坐标,可供参考:
ColliderHandler(a:Collider, b:Collider, c:b2Contact): void{
let collider = c.m_fixtureB.collider;
    let local = c.m_manifold.localNormal;
    let point = {
         x: collider.owner.x - collider.radius * local.x,
        y: collider.owner.y - collider.radius * local.y
    }
    console.log(point);
}
 
其中b是CircleCollider,如果b是BoxCollider,代码修改如下:
    let point = {
         x: collider.owner.x - collider.width * 0.5 * local.x,
        y: collider.owner.y - collider.height * 0.5 * local.y
    }

要回复问题请先

商务合作
商务合作