Cocos2d-x 3.0坐标系详解

Cocos2d-x 3.0坐标系详解,第1张

概述Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系。 笛卡尔坐标系 笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenGL坐标系为笛卡尔右手系。 屏幕坐标系和Cocos2d坐标系 标准屏幕坐标系使用和OpenGL不同的坐标系,而Cocos2d则使用和OpenGL相同的坐标系。 iOS, Android, Windows Phone等在开发应用时使用的是标准

Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系。

笛卡尔坐标系

笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenGL坐标系为笛卡尔右手系。

屏幕坐标系和Cocos2d坐标系

标准屏幕坐标系使用和OpenGL不同的坐标系,而Cocos2d则使用和OpenGL相同的坐标系。

iOS,AndroID,windows Phone等在开发应用时使用的是标准屏幕坐标系,原点为屏幕左上角,x向右,y向下。

Cocos2d坐标系和OpenGL坐标系一样,原点为屏幕左下角,x向右,y向上。

世界坐标系(World Coordinate) VS 本地坐标系(Node Local)

世界坐标系也叫做绝对坐标系,是游戏开发中建立的概念。因此,“世界”指游戏世界。
本地坐标系也叫相对坐标系,是和节点相关联的坐标系。每个节点都有独立的坐标系,当节点移动或改变方向时,和该节点关联的坐标系将随之移动或改变方向。

锚点(Anchor Point)

将一个节点添加到父节点里面时,需要设置其在父节点上的位置,本质上是设置节点的锚点在父节点坐标系上的位置。

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坐标系详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1080831.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存