Cocos2d-x 坐标转换

news/2024/7/3 13:33:55

cocos2d-x是基于openGLES的,所以遵循openGL的坐标系,也就是说是以屏幕的左下角为坐标原点,如下图:


屏幕坐标系一般是以左下角为坐标原点,如下图所示:



在开发cocos2d-x程序时一定要注意坐标轮换问题,屏幕与openGL坐标转换有相应的函数。


  • convertToNodeSpace(const CCPoint& worldPoint): 这个函数把世界坐标转换为对象窗口内的坐标。

  • convertToWorldSpace(const CCPoint& nodePoint): 这个函数把对象窗口内的坐标转换为世界坐标。

  •  convertToNodeSpaceAR(const CCPoint& worldPoint):这个函数把世界坐标转换为基于锚点的窗口内的坐标。

  •  convertToWorldSpaceAR(const CCPoint& nodePoint):这个函数把基于锚点的对象窗口内的坐标转换为世界坐标。


用到cocos2dX的坐标转换,一般两种情况:


1)从当前坐标点获取世界坐标点(屏幕坐标点,opengl的坐标系)


2)从当前坐标点获取相对于某个CCNode的坐标点;


第一种情况,直接用:nodeParent->convertToWorldSpace(node->getPosition());
这里一定是需要转换坐标对象的父类调用convertToWorldSpace,参数是对象的坐标点(相对于父类的坐标点);
返回的是屏幕坐标点;


第二种情况,直接用:node2->convertToNodeSpace(node1->getPosition);
node2并不是node1的父类,现在的情况就是:node1想得到相对于node2坐标系的坐标点;
返回的是相对于node2坐标系的坐标点。


注意:以上的调用,是没有考虑nodeParent和node2的anchorPoint的(就是使用了0,0的锚点);考虑到锚点就使用:

convertToWorldSpaceAR()和convertToNodeSpaceAR();


PS:AR的意思是不是Anchor Relative???


nodeParent->convertToWorldSpaceAR(node->getPosition()); //因为默认是0,0的锚点,

所以其得到的坐标点是 ccpAdd(nodeParent->convertToWorldSpace(node->getPosition()),ccp(nodeParent->getContentSize.width*0.5,nodeParent->getContentSize.height*0.5))
node2->convertToNodeSpaceAR(node1->getPosition); //因为默认是0,0的锚点,

所以其得到的坐标点是 ccpSub(nodeParent->convertToWorldSpace(node->getPosition()),ccp(node2->getContentSize.width*0.5,node2->getContentSize.height*0.5))


http://www.niftyadmin.cn/n/4518243.html

相关文章

Linux 基础知识(五)

一、每12小时备份并压缩/etc/目录到/back目录中,保存文件名格式为,etc-年-月-日-时-分.tar.gz) crontab -e *12/*** /usr/bin/tar -czf date %F-%H-%M-etc.tar.gz /etc/ 二、rpm包管理功能总结以及实例应用演示rpm命令:rpm [OPTIO…

「镁客早报」蓝色起源完成无人火箭试飞;知名对冲基金做空高通

亚马逊首批送货机器人Scout上线,正在西雅图附近展开测试;Facebook COO桑德伯格称支持扎克伯格继续担任CEO。 1.贝佐斯私人航天公司完成无人火箭试飞,有望载人飞行 据悉,亚马逊公司CEO杰夫贝佐斯(Jeff Bezos)旗下私人航天公司蓝色…

Python零基础学习笔记(二十四)—— 函数

认识函数:在以恶完整的项目中,某些功能会反复的使用,那么会将功能封装成函数,当我们要使用这些功能的时候直接调用函数即可本质:函数就是对功能的封装优点: 1、简化代码结构,增加了代码的复用度…

Linux中的sleep、usleep、nanosleep、poll和select

在进行Linux C/C编程时,可调用的sleep函数有好多个,那么究竟应当调用哪一个了?下表列出了这几个函数间的异同点,可作为参考: 性质 精准度 线程安全 信号安全 sleep libc库函数 秒 是 不能和alarm同时使用 …

Apache Hadoop生态系统

Hadoop从诞生至今已经发展成为一个大数据相关的庞大的软件生态系统。这里收集整理了跟Hadoop相关的Apache下的开源项目,以供后续分析研究。 Apache Hadoop Hadoop是一个大数据处理框架,它可用于从单台到数以千计的服务器集群的存储和计算服务。HadoopDis…

AlexNet卷积神经网络【前向反馈】

1.代码实现 1 # -*- coding: utf-8 -*-2 """3 Created on Wed Nov 14 17:13:05 20184 5 author: zhen6 """7 8 from datetime import datetime9 import math10 import time11 import tensorflow as tf12 13 batch_size 3214 num_batchs 10015 …

【Atcoder】 [ARC158D] Equation

题目链接 Atcoder方向 Luogu方向 题目解法 考虑等式两边都为多次齐次项 令等式左边的值为 F ( x , y , z ) F(x,y,z) F(x,y,z),等式右边的值为 G ( x , y , z ) G(x,y,z) G(x,y,z) 当 F ( x , y , z ) ≡ t ∗ G ( x , y , z ) ( m o d p ) F(x,y,z)\equiv t*…

领导说“你不喝就是看不起我”,用这3套话术硬怼,让小人掉价

朋友逼你喝酒,“你不喝就是不给我面子”,你怎么怼都可以,大不了这样的朋友不要了。但是领导也这样强迫你喝酒,“你不喝就是看不起我”,你怎么才能怼出高情商呢?看到最后,千古一招,足…