cocos2dx 中锚点
来源:互联网 发布:Bigbang yg知乎 编辑:程序博客网 时间:2024/05/21 22:58
出处:http://blog.csdn.net/wayne5ning/article/details/8160506
说在前面:以下是基于cocos2d-2.0-x-2.0.3作的总结
问题
在cocos2d示例代码HelloCpp中,为什么要将CCMenu设置位置到CCPointZero,即使CCMenu的锚点是在(0.5, 0.5)?
回答
这是因为CCMenu没有使用锚点进行坐标定位,而是使用的坐标原点。也就是说,CCMenu的坐标原点放到了其父节点的坐标原点。
延伸
不光是CCMenu没有使用锚点定位,像CCLayer,CCScene都没有使用锚点定位。具体设定是在构造函数中设计标记m_bIgnoreAnchorPointForPosition = true;下表描述了节点的默认锚点位置及定位方式
节点类型锚点位置使用锚点?CCNode(0, 0)是CCScene及其子类(0.5, 0.5)否CCLayer及其子类(0.5, 0.5)否CCSprite及其子类(0.5, 0.5)是说明:CCNode的其它子类如果没有特殊指定,都是继承了CCNode的锚点位置及定位方式。典型的是CCLabelAtlas,它就是使用CCNode的定位方式,因为它及它的父类CCAtlasNode都没有对锚点位置和是否使用锚点进行设置,而CCLabelFont使用与CCSprite的锚点和定位方式,因为它是CCSprite的子类。
应用
锚点位置和定位方式都是可以改变的。前者通过CCNode::setAnchorPoint()改变,后者通过设定CCNode::m_bIgnoreAnchorPointForPosition来改变。一般情况下,使用默认的就可以了,什么情况下需要改变呢?像下图这种情形可能需要改变锚点位置。
这是同一个窗口中使用了两个页面,第一个页面包含一个背景、一幅图和一个字标,后者包含一个背景、一幅图和一个按键。这两个页面可以切换,如果为了实现比较方便地进行变换,每个页面由一个节点表示是比较合理的。但是是使用哪一个类来表示根节点呢?可选的有四种,分别是CCNode、CCLayer、CCScene和CCSprite。
- 对于使用CCSprite,如果背景是图像,则比较方便实现,但是对于label是图像的孩子理解上有些别扭。
- 对于使用CCLayer,推荐是不使用那么多的Layer,因为第一个页面不需要交互,但是它仍然占用了消息处理的时间。
- 比较好的方式CCScene或CCNode,虽然使用CCScene对于理解上仍然有一些别扭。无论是使用CCScene和CCNode作为根节点,容易操作的方式都是将锚点设置到(0.5, 0.5),并且使用锚点进行定位。所以如果使用CCScene需要设定CCNode::m_bIgnoreAnchorPointForPosition=false,而如果使用CCNode需要设定CCNode::setAnchorPoint(ccp(0.5, 0.5))。
getAnchorPointInPixel
对于锚点在中心(0.5, 0.5)的结点,使用getAnchorPointInPixel获取到的是此结点的中心坐标。利用此接口,可以方便地定位到结点的中心。当然,使用getContentSize取半也可以。此信息用于对齐结点很有用处。
- cocos2dx 中锚点
- cocos2dx
- cocos2dx
- cocos2dx
- cocos2dx
- cocos2dx
- cocos2dx
- Cocos2dx
- cocos2dx
- cocos2dx
- cocos2dx
- cocos2dx
- cocos2dx
- cocos2dx
- Cocos2dx
- COCOS2dX
- cocos2dx
- quick-cocos2dx cocos2dx.lua
- java位运算
- Key event 分发流程研究心得
- 关于产品的一些思考——腾讯之CXO决赛
- JavaEE知识整理系列(四)JMX
- Sql Server临时表的作用域
- cocos2dx 中锚点
- linux 下apache搭建遇见的问题
- 《Think in Java》(三)——一切都是对象
- 《挑战程序设计竞赛》推荐及算法相关书籍吐槽
- 简单工厂模式
- oem中文页面乱码问题
- JavaEE知识整理系列(五)JNDI
- android的一些常用手机信息获取
- linux openssh 代理转发总结