cocosCreator 节点坐标和世界坐标的转换
问题描述:同一个层上的不同节点下的元素移动。在C这个层上面有两个节点A和B,现在我想把A下的一个临时创建的节点移动到B下这个时候,第一想到的是,获取两个创建的节点的坐标,然后cc.Move但是实际的效果不是这样的,元素都不知道移动到那里去了?因为,节点的坐标都是相对的。就是在A下新建一个节点,他的坐标就是cc.v2(0,0);转换世界坐标整体思路就是...
·
问题描述:同一个层上的不同节点下的元素移动。
在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);
}
这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!
更多推荐
已为社区贡献3条内容
所有评论(0)