cocosCreator 节点坐标和世界坐标的转换

问题描述:同一个层上的不同节点下的元素移动。

 在C这个层上面有两个节点A和B,现在我想把A下的一个临时创建的节点移动到B下

这个时候,第一想到的是,获取两个创建的节点的坐标,然后cc.Move

但是实际的效果不是这样的,元素都不知道移动到那里去了?

因为,节点的坐标都是相对的。就是在A下新建一个节点,他的坐标就是cc.v2(0,0);

转换世界坐标

整体思路就是

1、获取双方的世界坐标

2、转换为统一的节点的相对坐标

3、设置坐标

 下面是坐标转换code

/**
 * 得到一个节点的世界坐标
 * node的原点在中心
 * @param {*} node 
 */
function localConvertWorldPointAR(node) {
    if (node) {
        return node.convertToWorldSpaceAR(cc.v2(0, 0));
    }
    return null;
}
 
/**
 * 得到一个节点的世界坐标
 * node的原点在左下边
 * @param {*} node 
 */
function localConvertWorldPoint(node) {
    if (node) {
        return node.convertToWorldSpace(cc.v2(0, 0));
    }
    return null;
}
 
/**
 * 把一个世界坐标的点,转换到某个节点下的坐标
 * 原点在node中心
 * @param {*} node 
 * @param {*} worldPoint 
 */
function worldConvertLocalPointAR(node, worldPoint) {
    if (node) {
        return node.convertToNodeSpaceAR(worldPoint);
    }
    return null;
}
 
/**
 * 把一个世界坐标的点,转换到某个节点下的坐标
 * 原点在node左下角
 * @param {*} node 
 * @param {*} worldPoint 
 */
function worldConvertLocalPoint(node, worldPoint) {
    if (node) {
        return node.convertToNodeSpace(worldPoint);
    }
    return null;
}
/**
 *  * 把一个节点的本地坐标转到另一个节点的本地坐标下
 * @param {*} node 
 * @param {*} targetNode 
 */
function convetOtherNodeSpace(node, targetNode) {
    if (!node || !targetNode) {
        return null;
    }
    //先转成世界坐标
    let worldPoint = localConvertWorldPoint(node);
    return worldConvertLocalPoint(targetNode, worldPoint);
}
 
/**
 *  * 把一个节点的本地坐标转到另一个节点的本地坐标下
 * @param {*} node 
 * @param {*} targetNode 
 */
function convetOtherNodeSpaceAR(node, targetNode) {
    if (!node || !targetNode) {
        return null;
    }
    //先转成世界坐标
    let worldPoint = localConvertWorldPointAR(node);
    return worldConvertLocalPointAR(targetNode, worldPoint);
}

猜你喜欢

转载自blog.csdn.net/huanghuipost/article/details/102825429