cc.director.getPhysicsManager().testAABB(rect)

cc.director.getPhysicsManager().testAABB(rect) 在使用时检测到的碰撞体 如果碰撞体本身存在角度 明明没碰到 但是检测出来缺碰撞到了

因为AABB包围盒就是不包含旋转的,不管你看到的是什么角度,它始终是一个角度,得用obb

在没有角度的方块周围的圆点击了是正常的 但是存在角度的点击了就存在问题

好的 谢谢 我看一下

AABB包围盒和OBB包围盒区别_哈市雪花的博客-CSDN博客


你瞧

嗯嗯 第一次弄这个 就发现角度的问题 但不确定是不是角度的问题
现在确定了

我想问下 obb这个是怎么用的

我建议直接用多边形组件+然后搭配事件检测。就不用考虑这么多了


就类似这样吗

一开始我用的是碰撞回调 但是这种方法不稳定 因为这个方块后面试可以动的


以下为AI生成代码

在Cocos Creator 3.X中,你可以使用物理系统和碰撞器组件来实现2D物理多边形和圆形的碰撞检测。下面是一个简单的示例脚本,可以在碰撞发生后执行一次检查:

const { ccclass, property } = cc._decorator;

@ccclass
export default class CollisionDetection extends cc.Component {
@property(cc.PhysicsPolygonCollider)
polygonCollider: cc.PhysicsPolygonCollider = null;

@property(cc.PhysicsCircleCollider)
circleCollider: cc.PhysicsCircleCollider = null;


onEnable() {
    // 注册碰撞回调
    cc.director.getCollisionManager().enabled = true;
    cc.director.getCollisionManager().enabledDebugDraw = true;
    cc.director.getCollisionManager().enabledDrawBoundingBox = true;
    this.node.on(cc.Node.EventType.COLLISION_ENTER, this.onCollisionEnter, this);
}

onDisable() {
    // 取消注册碰撞回调
    cc.director.getCollisionManager().enabled = false;
    cc.director.getCollisionManager().enabledDebugDraw = false;
    cc.director.getCollisionManager().enabledDrawBoundingBox = false;
    this.node.off(cc.Node.EventType.COLLISION_ENTER, this.onCollisionEnter, this);
}

onCollisionEnter(event: cc.Event.EventCustom) {
    const collider = event.detail.collider;
    if (collider === this.polygonCollider || collider === this.circleCollider) {
        // 执行碰撞后的检查
        this.checkCollision();
    }
}

checkCollision() {
    // 执行碰撞后的检查逻辑
    console.log('Collision detected!');
}}

在这个示例中,我们创建了一个名为CollisionDetection的脚本,它包含了一个多边形碰撞器(polygonCollider)和一个圆形碰撞器(circleCollider)。在脚本的onEnable方法中,我们注册了碰撞回调,并在碰撞发生时执行了onCollisionEnter方法。在onCollisionEnter方法中,我们检查碰撞的碰撞体是否是多边形碰撞器或圆形碰撞器,如果是,则执行checkCollision方法进行碰撞后的检查逻辑。
你可以将这个脚本添加到你的2D物体上,并将多边形碰撞器和圆形碰撞器分别赋值给polygonCollider和circleCollider属性。当两个碰撞器发生碰撞时,会触发checkCollision方法,并在控制台输出"Collision detected!"。
请注意,这只是一个简单的示例,你可以根据你的具体需求进行适当的修改和扩展。另外,你可能还需要在物理系统中设置相应的碰撞组件、物理材质等属性,以确保正确的碰撞检测。

论坛能不能加个代码阅读器。。。

好的 理解了 非常感谢

如果你觉得这样做会解决不了多次短时间碰撞触发的问题。可以了解一下JS的节流防抖
什么是防抖和节流?有什么区别?如何实现? - 掘金 (juejin.cn)

好的 谢谢