cocos2d坐标位置总结

本文总结了cocos2d中的屏幕坐标系和GL坐标系,解释了CCNode的setPosition函数、触摸事件坐标以及精灵的锚点设置。强调了子精灵的位置计算以父精灵左下为原点,并讨论了缩放对子精灵位置的影响。此外,还提到了坐标转换方法convertToWindowSpace和convertToNodeSpace在坐标转换中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本的两个坐标系:屏幕坐标系和GL坐标系。

屏幕坐标系x轴朝右,y轴朝下。默认原点在左上角。

GL坐标系x轴朝右,y轴朝上。默认原点在左下角。

CCNode类的setPosition函数使用的就是GL坐标系。

触摸事件的CCTouch对象中的坐标就是屏幕坐标系.

对于精灵类,影响显示坐标因数为锚点及位置。

默认锚点为(0.5f,0.5f),即精灵中心。

(0,0)为左下,(1,1)为右上。

对于单个精灵,位置较简单,通过setPosition()设置。

对于子精灵,位置计算是以父精灵左下为坐标原点,并且无关父精灵锚点。

如:无论父精灵锚点为(0,0)抑或(1,1),子精灵setposition(0,0)时显示总是位于父精灵坐下方。、

有些需要注意的地方:

1)子精灵以父精灵左下为坐标原点。如果有对父精灵进行缩放处理,会影响子精灵位置。(其实同样会影响子精灵显示,及子精灵也会缩放)。

2)如果想让子精灵显示在父精灵的某相对位置,如:setPosition(25,25)。当程序有做过适配处理,此时位置数据应该进行缩放处理。

CCNode中两个个方法方法:

getContentSize用来获得节点原始大小。返回CGSize类型

getBoundingBox获得节点当前大小,即如果经过缩放那么就是缩放后的大小。返回CGRect类型。

有个问题最近才遇到,父精灵进行缩放处理,会对子精灵进行标记(boolean值),在实际绘制过程中会影响子精灵显示大小,但并不改变子精灵的getBoundingBox所获得的值,也就是只有直接setscale才会影响getBoundingBox数值。

CCSprite中有个方法:

getTextureRect返回精灵纹理大小,返回CGRect类型,并且是原始纹理大小,无关缩放。在一般情况下和getContentSize作用一样,但如果用TP处理过,还回值是实际纹理大小,留白部分会去除。这个在碰撞检测过程中经常用到。

cocos2d中还有两个方法用于坐标转换:

convertToWindowSpace,将节点坐标转换为屏幕坐标,注意的是转换后为UI坐标系。

convertToNodeSpace将屏幕坐标转换为节点坐标,转换后为GL坐标系

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值