请问一下大佬们~如何判断node是否相交

/** 是否相交 */
public static IsIntersect(node1: Node, node2: Node): boolean {
//获取 node1 和 node2 的包围框(bounding box)
const rect1 = node1.getComponent(UITransform).getBoundingBox();
const rect2 = node2.getComponent(UITransform).getBoundingBox();
return rect1.intersects(rect2);
}
我是这样写的,但是node是带旋转的,就会出现明明没有碰到,但是判断就说碰到了~·请问大佬们如何决解?


旋转后输出的宽高都变宽了,所以导致肉眼看没有相交,但是实际相交了~~这个函数本来就会这样的?

getboundingbox 不会考虑父节点的矩阵,试试getBoundingBoxtoWolrd

总儿来说,这个东西性能并不好,不适合update线程里用

用getBoundingBoxtoWolrd的话就更扩展了,比之前还大了

Intersection2D.polygonPolygon(),试试?

你可以给节点添加一个 2D 多边形包围盒,然后在游戏运行时获取包围盒组件的 points 坐标组。这些 points 是会跟随节点的 transform 而变化的。然后就可以用下方类似这种方法去判断是否相交。

(这是 CocosCreator 2.x 版本的用法,需自行升级为 3.x 的)
this.testNode.on(cc.Node.EventType.TOUCH_END, (e)=>{
    var p = this.testNode.parent.convertToNodeSpaceAR(e.getLocation());
    var points = this.testNode.getComponent(cc.PolygonCollider).points;
    var result = cc.Intersection.pointInPolygon(p, points);
    if (!result) this.testNode.emit("touch_out");
})