cocoscreator开发踩坑--坐标转换,将C转换为A的子节点.md

Posted by lizhao on 07-09,2019

cocoscreator开发踩坑--坐标转换,将C转换为A的子节点

[toc]

问题描述

将C转换为A的子节点,中间的坐标转换问题

下面是我遇到的情况:

A节点包含B节点,B节点包含C节点
C是B的子节点,B是A的子节点(A是爷爷,B是爸爸,C是孙子)

当然A和B可以没有任何关系

解决方式

当把C节点的父节点改成A节点时,可以使用下面代码

var vecByThisInTheWorld =B.convertToWorldSpaceAR(C.getPosition());
var newVec2 = A.convertToNodeSpaceAR(vecByThisInTheWorld);
C.x = newVec2.x;
C.y = newVec2.y;
C.parent = A;

函数封装

// 调用
this.changePoint(A, C.parent, C);
changePoint(A, B, C) {
	var vecByThisInTheWorld = C.parent.convertToWorldSpaceAR(C.getPosition());
	var newVec2 = A.convertToNodeSpaceAR(vecByThisInTheWorld);
	C.x = newVec2.x;
	C.y = newVec2.y;
	C.parent = A;
},

官方api解释

convertToWorldSpaceAR

将节点坐标系下的一个点转换到世界空间坐标系。

这里是将B下面的C位置转换成世界坐标,返回的是一个点 vecByThisInTheWorld(x,y)

convertToNodeSpaceAR

将一个点转换到节点 (局部) 空间坐标系,这个坐标系以锚点为原点。

这里需要是将 某个点的世界坐标 转换成 某个节点的局部坐标系坐标-->

这里需要是将 C的世界坐标vecByThisInTheWorld(x,y) 转换成 A的局部坐标系 坐标newVec2(x,y)

联系方式

有问题或者有错误欢迎联系我呢

qq群:978460362 (cocos-creator开发交流群)

微信公众号:小王老店/lizhaoblog