深入理解 cocos2d-x 坐标系

深入理解 cocos2d-x 坐标系,第1张

概述最近在研究cocos2d-x坐标系,看了官网的文档,一头雾水,今天搜到这篇文章,豁然开朗。转自里沃特-技术博客! 首先对于初学的,带大家认识 cocos2d-x 中坐标系的几个概念,参考 http://www.voidcn.com/article/p-byvoorac-kw.html。其他的往下看。 弄懂坐标系是开始开发的重要的一步,为了不让大家头晕,现在里沃特深入的为大家讲解一下,本人原文地址:

最近在研究cocos2d-x坐标系,看了官网的文档,一头雾水,今天搜到这篇文章,豁然开朗。转自里沃特-技术博客!

首先对于初学的,带大家认识 cocos2d-x 中坐标系的几个概念,参考 http://www.jb51.cc/article/p-byvoorac-kw.html。其他的往下看。

弄懂坐标系是开始开发的重要的一步,为了不让大家头晕,现在里沃特深入的为大家讲解一下,本人原文地址:http://www.cnblogs.com/lyout/p/3292702.html。

首先我们添加两个测试精灵(宽:27,高:40)到场景里面:

CCSprite *sprite1 = CCSprite::create( "player.png" ); sprite1->setposition(ccp(20,40)); sprite1->setAnchorPoint(ccp(0,0)); this ->addChild(sprite1); CCSprite *sprite2 = CCSprite::create( ); sprite2->setposition(ccp(-15,-30)); sprite2->setAnchorPoint(ccp(1,1)); ->addChild(sprite2);

然后调试,在场景中大概是下图这样显示(以左下角为坐标原点,从左到右为x方向,从下到上为y方向,废话了:)):

在cocos2d-x中,每个精灵都有一个锚点,以后对精灵的 *** 作(比如旋转)都会围绕锚点进行,我们暂且可以看作是精灵的中心位置,一般来说有每个方向有三种可能的值:0,0.5,1。上图中红色圆点即为各自的锚点,sprite1 锚点为 (0,0) 左下角,sprite2锚点为(1,1)在右上角。

现在我们来看看坐标系转换,同样地,我们先写点测试代码:

CCPoint p1 = sprite2->convertToNodeSpace(sprite1->getposition());CCPoint p2 = sprite2->convertToWorldspace(sprite1->getposition()); CCPoint p3 = sprite2->convertToNodeSpaceAR(sprite1->getposition());CCPoint p4 = sprite2->convertToWorldspaceAR(sprite1->getposition());

接着,再打印出各点的x,y值:

cclog("p1:%f,%f",p1.x,p1.y);"p2:%f,p2.x,p2.y); "p3:%f,p3.x,p3.y);"p4:%f,p4.x,p4.y);

现在开始分析这四个常用坐标系转换函数转换后的值(有兴趣的同学可以先算一算)。

由于cocos2d-x的坐标系(本地坐标系)是以左下角为坐标原点的,所以sprite1和sprite2的坐标原点在上图的位置分别是(20,40)、(-42,-70),那么很明显的:

p1就是sprite1锚点相对于sprite2原点来说在sprite2坐标系中的位置,经过对比上图,我们可以得到(20-(-42),40-(-70))即(62,110)

p2就是sprite2原点来说在上图坐标系中的位置,这样我们可以计算出sprite1在sprite2坐标系中的位置:(20+(-42),40+(-70)),即(-22,-30)

p3就是sprite2锚点来说在sprite2坐标系中的位置,也就是(20-(-15),40-(-30)),即(35,70)

p4就是sprite2锚点来说在上图坐标系中的位置,也就是(20+(-15),40+(-30)),即(5,10)

现在我们可以知道,计算方法都是用sprite1的坐标去加减sprite2的坐标,针对本地坐标系就用减法,针对世界坐标系就用加法

好了,方法出来了,有兴趣的可以做计算一下以下几个坐标的值(先不要上机调试),然后回复我,差不多10个回复后我会贴出正确答案:

CCPoint p1 = sprite1->convertToNodeSpace(sprite2->getposition());CCPoint p2 = sprite1->convertToWorldspace(sprite2->getposition()); CCPoint p3 = sprite1->convertToNodeSpaceAR(sprite2->getposition());CCPoint p4 = sprite1->convertToWorldspaceAR(sprite2->getposition());

版权声明作者:夏荣全
邮箱:lyout(at)163.com
扣扣:249775085
本文版权归作者所有,转载请注明出处: http://www.cnblogs.com/lyout/
分类: 游戏开发 标签: cocos2d-x 总结

以上是内存溢出为你收集整理的深入理解 cocos2d-x 坐标系全部内容,希望文章能够帮你解决深入理解 cocos2d-x 坐标系所遇到的程序开发问题。

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

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

原文地址:https://54852.com/web/1027362.html

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

发表评论

登录后才能评论

评论列表(0条)