CocosCreator 3.4.2版本 如何判定两个Node不同父节点的节点是否在对方区域内 边缘也算 代码实例
时间: 2024-03-09 14:46:47 浏览: 35
如果两个节点有不同的父节点,需要将它们的包围盒转换到同一个坐标系中,才能比较它们的位置关系。
可以使用 `convertToWorldSpaceAR` 函数将节点的坐标转换为世界坐标系中的坐标,然后再使用 `convertToNodeSpaceAR` 函数将世界坐标系中的坐标转换为另一个节点的本地坐标系中的坐标。这样,就可以将两个节点的坐标转换到同一个坐标系中,比较它们的位置关系。
以下是一个示例代码:
```typescript
// 假设有两个节点 node1 和 node2,它们有不同的父节点
const box1 = node1.getBoundingBoxToWorld();
const box2 = node2.getBoundingBoxToWorld();
const worldPos1 = node1.convertToWorldSpaceAR(cc.Vec2.ZERO);
const worldPos2 = node2.convertToWorldSpaceAR(cc.Vec2.ZERO);
const localPos1 = node2.convertToNodeSpaceAR(worldPos1);
const localPos2 = node1.convertToNodeSpaceAR(worldPos2);
if (box1.intersects(box2) && localPos1.x >= 0 && localPos1.y >= 0 && localPos2.x >= 0 && localPos2.y >= 0) {
console.log('两个节点相交');
} else {
console.log('两个节点不相交');
}
```
在这个示例中,首先分别获取节点 node1 和 node2 在世界坐标系中的包围盒。然后,使用 `convertToWorldSpaceAR` 函数将节点 node1 和 node2 的坐标转换为世界坐标系中的坐标。接着,使用 `convertToNodeSpaceAR` 函数将世界坐标系中的坐标转换为另一个节点的本地坐标系中的坐标,分别得到节点 node1 在节点 node2 的本地坐标系中的坐标 localPos1 和节点 node2 在节点 node1 的本地坐标系中的坐标 localPos2。最后,判断两个包围盒是否相交,并且判断 localPos1 和 localPos2 是否大于等于 0,如果满足条件,则表示两个节点相交。
需要注意的是,由于节点的锚点可能不在中心位置,因此在使用 `convertToWorldSpaceAR` 函数和 `convertToNodeSpaceAR` 函数时,需要传入一个 `cc.Vec2.ZERO` 的参数,表示节点中心点的坐标。如果节点的锚点不在中心位置,需要传入相应的坐标值。