版本:2.3.4
cocos的坐标系和其他引擎不一样。
Egret中坐标系
舞台的原点在左上角
组件的原点也在左上角
角度顺时针旋转为正数,逆时针旋转为负数
Laya中坐标系
和Egret一致
Cocos坐标系
和Laya、Egret的y轴朝下的,cocos的y轴是朝上的。
角度顺时针是负数,逆时针是正数。
而且cocos新建组件锚点0.5居中
本地坐标转换到世界坐标
//将节点坐标系下的一个点转换到世界空间坐标系。 convertToWorldSpaceAR
//将一个相对于节点左下角的坐标位置转换到世界空间坐标系。 //这个 API 的设计是为了和 cocos2d-x 中行为一致,更多情况下你可能需要使用 convertToWorldSpaceAR convertToWorldSpace
cocos提供了2个API将本地坐标转换到世界坐标,其中convertToWorldSpace已经不推荐使用
如上图
Canvas1560x720,锚点(0.5,0.5)
一个白色方块200x200,锚点(0.5,0.5),在距离左下角(200,200)的位置
一个红色方块100x100,锚点(0.5, 0.5),在白色方块内部,距离白色方块中心点(50,50)
局部坐标
console.log(white.x, white.y); //-580 -160 console.log(red.x, red.y); //50 50
局部转全局坐标
let whiteWorldPos = white.convertToWorldSpaceAR(white.position); console.log(whiteWorldPos.x, whiteWorldPos.y); //-379.78647686832744 40 let redWorldPos = red.convertToWorldSpaceAR(red.position); console.log(redWorldPos.x, redWorldPos.y); //300.21352313167256 300
局部转全局坐标
let whiteWorldPos = white.parent.convertToWorldSpaceAR(white.position); console.log(whiteWorldPos.x, whiteWorldPos.y); //200.21352313167256 200 let redWorldPos = red.parent.convertToWorldSpaceAR(red.position); console.log(redWorldPos.x, redWorldPos.y); //250.21352313167256 250
全局转局部坐标
let redLocalPos = red.convertToNodeSpaceAR(new cc.Vec2(250,250)); console.log(redLocalPos); //0,0
全局转局部坐标
let redLocalPos = red.parent.convertToNodeSpaceAR(new cc.Vec2(250,250)); console.log(redLocalPos); //50,50