cocos creator 圆形碰撞问题 解决办法

本文介绍了一种基于偏移量计算的碰撞检测与响应方法。通过计算当前和前一次碰撞的位置差值来确定偏移量,确保物体能正确弹离碰撞面。文章详细展示了如何在代码中实现这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建变量offsetX 和offsetY 计算偏移量
计算本次碰撞和上次碰撞的差值,从而判断出碰撞位置,最后计算出偏移量
如果不增加偏移量, 碰撞物体无法弹出碰撞体

onCollisionStay: function (other, self) {
    this.node.stopAllActions ( )
    // 碰撞系统会计算出碰撞组件在世界坐标系下的相关的值,并放到 world 这个属性里面
    var world = self.world;

    // 碰撞组件的 aabb 碰撞框
    var aabb = world.aabb;

    // 上一次计算的碰撞组件的 aabb 碰撞框
    var preAabb = world.preAabb;
    var r = world.radius;

    var offsetX = aabb.x - preAabb.x
    var offsetY = aabb.y - preAabb.y
    if(offsetX != 0) offsetX = offsetX/Math.abs(offsetX) * 2
    if(offsetY != 0) offsetY = offsetY/Math.abs(offsetX) * 2
    var point = cc.pAdd(cc.p(preAabb.x,preAabb.y),cc.p(r - offsetX, r - offsetY))
    var Nodepoint = this.node.parent.convertToNodeSpaceAR(point)
    this.node.setPosition(Nodepoint)



//--------------------------------------------------------------
    // 碰撞框的世界矩阵
    var t = world.transform;
    // 以下属性为圆形碰撞组件特有属性
    var p = world.position;
    // 以下属性为 矩形 和 多边形 碰撞组件特有属性
    var ps = world.points;
},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值