Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系。
笛卡尔坐标系笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenGL坐标系为笛卡尔右手系。
屏幕坐标系和Cocos2d坐标系标准屏幕坐标系使用和OpenGL不同的坐标系,而Cocos2d则使用和OpenGL相同的坐标系。
iOS,AndroID,windows Phone等在开发应用时使用的是标准屏幕坐标系,原点为屏幕左上角,x向右,y向下。
Cocos2d坐标系和OpenGL坐标系一样,原点为屏幕左下角,x向右,y向上。
世界坐标系也叫做绝对坐标系,是游戏开发中建立的概念。因此,“世界”指游戏世界。
本地坐标系也叫相对坐标系,是和节点相关联的坐标系。每个节点都有独立的坐标系,当节点移动或改变方向时,和该节点关联的坐标系将随之移动或改变方向。
将一个节点添加到父节点里面时,需要设置其在父节点上的位置,本质上是设置节点的锚点在父节点坐标系上的位置。
Anchor Point的两个参数都在0~1之间。它们表示的并不是像素点,而是乘数因子。(0.5,0.5)表示Anchor Point位于节点长度乘0.5和宽度乘0.5的地方,即节点的中心 在Cocos2d-x中Layer的Anchor Point为默认值(0,0),其他Node的默认值为(0.5,0.5)。 Layer比较特殊,它默认忽略锚点,所以要调用ignoreAnchorPointForposition(false)
来改变锚点。ignoreAnchorPointForposition()
作用是将锚点固定在一个地方。如果设置其值为true,则图片资源的Anchor Pont固定为左下角,否则即为所设置的位置。 VertexZ,positionZ和zOrder VerextZ是OpenGL坐标系中的Z值 positionZ是Cocos2d-x坐标系中Z值 zOrder是Cocos2d-x本地坐标系中Z值 positionZ的值即为opengl的z值VertexZ。可以通过setpositionZ接口来设置positionZ。在实际开发中我们只需关注zOrder。
触摸点(touch position)所以在处理触摸事件时需要用重写以下四个函数:
virtual bool ontouchBegan(touch *touch,Event * event); virtual voID ontouchended(touch *touch,Event * event); virtual voID ontouchCancelled(touch *touch,Event * event); virtual voID ontouchmoved(touch *touch,Event * event);
touch position是屏幕坐标系中的点,OpenGL position是Cocos2d-x用到的OpenGL坐标系上的点坐标。通常我们在开发中会使用两个接口getLocation()
和getLocationInVIEw()
来进行相应坐标转换工作,而内部实现是通过调用Director::getInstance()->convertToGL(_point);
返回GL坐标。
此外,关于世界坐标系和本地坐标系的相互转换,在Node中定义了以下四个常用的坐标变换的相关方法:
// 把世界坐标转换到当前节点的本地坐标系中 Point convertToNodeSpace(const Point& worldPoint) const; // 把基于当前节点的本地坐标系下的坐标转换到世界坐标系中 Point convertToWorldspace(const Point& nodePoint) const; // 基于Anchor Point把基于当前节点的本地坐标系下的坐标转换到世界坐标系中 Point convertToNodeSpaceAR(const Point& worldPoint) const; // 基于Anchor Point把世界坐标转换到当前节点的本地坐标系中 Point convertToWorldspaceAR(const Point& nodePoint) const;
注意,例如convertToNodeSpace,参数传入的是worldPoint,也就是将一个世界坐标转换为以当前节点为参考的局部坐标。其他函数类似。AR是考虑Anchor Point,无AR则不考虑Anchor Point。
总结以上是内存溢出为你收集整理的Cocos2d-x 3.0坐标系详解全部内容,希望文章能够帮你解决Cocos2d-x 3.0坐标系详解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)