问题描述:同一个层上的不同节点下的元素移动。
在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);
}