Cocos2d-x中的坐标转换

点击android和ios的屏幕,获取的是屏幕坐标系(UI),在左上角。

用cocos2d-x 制作的游戏渲染系统是opengl,opengles,所有,Cocos2d-x的游戏坐标系是openGl坐标系,在左下角。

在触摸事件处理中。我们首先获取的是屏幕坐标,但是这样的触摸点和我们的引擎中处理的点不匹配。所有我们获取了触摸的点之后,先转换为引擎世界的坐标,然后再进行处理。不过在Cocos2d-x中有这样的函数。node->getLocation()这样直接获取的就是引擎坐标。node->getLocationInView(),获取的是屏幕坐标,所有我们还要把屏幕左边再转换成openGL坐标,这样处理就多此一举了。所有,我们干脆直接使用getLocation()函数,直接获取openGL坐标。


可是你知道吗,在一个Layer中,我们可以添加其他的Layer,node,sprite,Layer的坐标是世界坐标。在Layer中添加另一个Layer,Layer上再添加node,sprite。那个这个sprite获得位置,是相对于其它的父节点的坐标系的。


但是我们不论如何的在一个Layer上添加各种各样的节点,到最后,还是得把所有的节点统统转换为世界坐标,再进行绘制操做。


但是在实际问题中,碰到碰撞检测的问题,特别不是在一个父节点中的两个节点的碰撞,这样的碰撞检测问题,虽然很简单,但是很扯淡,因为必须进行坐标系的转换。而且只有把他们统统转换为以世界坐标为参照的坐标系,它们之间才好处理问题。


在Cocos2d-x引擎中封装了有 "本地节点坐标系->世界坐标系"  ,“世界坐标系->本地节点坐标系"转换的函数,


  就是这几个函数,还真的就不是那么的好使用,下面把我把它使用的实验粘在上面,以备以后复习。

第一步:添加一个图层a到Layer中。位置(20,20),相对于世界坐标系。

第二步:往图层a上添加图层b;b位置(10,10),其实是在a坐标系的位置。

第三步:将节点b,转换为世界坐标系

第四步:将世界坐标系转换为本地的节点坐标系。

这个的操作让我明白了一个简单的道理。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值