当前位置:   article > 正文

Cocos Creator 坐标转换_cocos creator 世界坐标转局部坐标

cocos creator 世界坐标转局部坐标

转载自 https://www.jianshu.com/p/350a488f4802 

主要简单讲解下坐标系统,由于Creator是基于Cocos2dx,也就是使用OpenGL的坐标系,即原点在屏幕左下角,x轴向右,y轴向上。然后讲解下本地坐标与世界坐标,最后讲下坐标转换。

坐标系

基于OpenGL坐标,也就是原点在屏幕左下角,x轴向右,y轴向上。下面讲解的世界坐标也就是与OpenGL坐标系方向一致。

本地坐标

本地坐标是相对于父节点而言的,也就是相对于父节点的位置。通过node的getPosition()来获取坐标。

世界坐标

世界坐标也就是上面说的OpenGL坐标,原点在屏幕左下角,x轴向右,y轴向上。例如触摸事件中得到的坐标就是世界坐标。

锚点

锚点是对应于Node属性中的AnChor。其中(0.5,0..5)是位于中心,(0,0)是位于左下角,(0,1)是位于左上角,(1,0)是位于右下角,(1,1)是位于右上角

坐标转换

1. 取得节点的世界坐标

  1. /**
  2. * 得到一个节点的世界坐标
  3. * node的原点在中心
  4. * @param {*} node
  5. */
  6. function localConvertWorldPointAR(node) {
  7. if (node) {
  8. return node.convertToWorldSpaceAR(cc.v2(0, 0));
  9. }
  10. return null;
  11. }
  12. /**
  13. * 得到一个节点的世界坐标
  14. * node的原点在左下边
  15. * @param {*} node
  16. */
  17. function localConvertWorldPoint(node) {
  18. if (node) {
  19. return node.convertToWorldSpace(cc.v2(0, 0));
  20. }
  21. return null;
  22. }

2. 世界坐标转换成某个节点下的坐标

  1. /**
  2. * 把一个世界坐标的点,转换到某个节点下的坐标
  3. * 原点在node中心
  4. * @param {*} node
  5. * @param {*} worldPoint
  6. */
  7. function worldConvertLocalPointAR(node, worldPoint) {
  8. if (node) {
  9. return node.convertToNodeSpaceAR(worldPoint);
  10. }
  11. return null;
  12. }
  13. /**
  14. * 把一个世界坐标的点,转换到某个节点下的坐标
  15. * 原点在node左下角
  16. * @param {*} node
  17. * @param {*} worldPoint
  18. */
  19. function worldConvertLocalPoint(node, worldPoint) {
  20. if (node) {
  21. return node.convertToNodeSpace(worldPoint);
  22. }
  23. return null;
  24. }

3. 节点的本地坐标转到另一个节点的本地坐标下

  1. /**
  2. * * 把一个节点的本地坐标转到另一个节点的本地坐标下
  3. * @param {*} node
  4. * @param {*} targetNode
  5. */
  6. function convetOtherNodeSpace(node, targetNode) {
  7. if (!node || !targetNode) {
  8. return null;
  9. }
  10. //先转成世界坐标
  11. let worldPoint = localConvertWorldPoint(node);
  12. return worldConvertLocalPoint(targetNode, worldPoint);
  13. }
  14. /**
  15. * * 把一个节点的本地坐标转到另一个节点的本地坐标下
  16. * @param {*} node
  17. * @param {*} targetNode
  18. */
  19. function convetOtherNodeSpaceAR(node, targetNode) {
  20. if (!node || !targetNode) {
  21. return null;
  22. }
  23. //先转成世界坐标
  24. let worldPoint = localConvertWorldPointAR(node);
  25. return worldConvertLocalPointAR(targetNode, worldPoint);
  26. }

最后

通过本文的讲解,希望给新手们有所帮助。坐标转换的应用可以到触摸事件Demo查看

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/152585
推荐阅读
相关标签
  

闽ICP备14008679号