【转】cocos2d-x中锚点设置及定位方式
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取半也可以。此信息用于对齐结点很有用处。
【转】cocos2d-x中锚点设置及定位方式的更多相关文章
- cocos2d-x中锚点设置及定位方式
问题 在cocos2d演示样例代码HelloCpp中,为什么要将CCMenu设置位置到CCPointZero,即使CCMenu的锚点是在(0.5, 0.5)? 回答 这是由于CCMenu没有使用锚点进 ...
- htnl中的遮罩层以及定位方式
在页面显示遮罩层,例如:一个div的css样式: $msk.css({ "top":"0", "left":"0", & ...
- Flex 4中组件背景设置(填充方式)group为例子
以下以Group为例子讲述如何在Flex 4中填充背景颜色.图片: 1.图片填充方式: <s:Group x="0" y="0" height=" ...
- html中的锚点设置
html中的锚点 一.页面内跳转的锚点设置 页面内的跳转需要两步: 方法一: ①:设置一个锚点链接去找喵星人:(注意:href属性的属性值最前面要加#) ②:在页面中需要的位置设置锚点<a na ...
- HTML中的锚点设置和table格式
锚点设置: <a href="#1">锚点</a> <a name="1"></a> table表格格式: &l ...
- 如何在cocos2d项目中enable ARC
如何在cocos2d项目中enable ARC 基本思想就是不支持ARC的代码用和支持ARC的分开,通过xcode中设置编译选项,让支持和不支持ARC的代码共存. cocos2d是ios app开发中 ...
- SpriteBuilder中锚点的一般用法
注意:改变节点的锚点(anchor point)将会影响缩放和旋转操作,也会影响边界边框和碰撞的检测. 锚点仅仅挪动节点的视觉表现,这种改变可能与物理表现不一致. 你绝不应该错误的挪动锚点去改变节点的 ...
- 转-ArcGIS Engine中的License设置
AE开发中的License有两种方法进行设置,一种是通过LicenseControl控件,另一种是通过IAoInitialize接口设置.整个应用程序中只能有一种方式存在,如果进行了两种License ...
- Android中的颜色设置
1.在android中经常看到设置的颜色为八位的十六进制的颜色值,例如 public static final class color { public static final int lightb ...
随机推荐
- Android源码学习之装饰模式应用
首先得了解最基础的装饰器模式 参考 设计模式之八 --- 装饰模式(Decorator) 参考链接:http://blog.csdn.net/cjjky/article/details/7478788 ...
- HDU 4734
数位dp题:也是我做的第一个数位dp的题目: 感觉数位dp的模板性很强啊,思想都差不太多! 有几个写的很好的参考资料: 推荐一下: 数位计数问题解法研究 浅谈数位类统计问题 我的代码: #includ ...
- POJ 2528 Mayor's posters(线段树)
点我看题目 题意 :建一堵墙粘贴海报,每个候选人只能贴一张海报,海报的高度与墙一样高,一张海报的宽度是整数个单位,墙被划分为若干个部分,每个部分的宽度为一个单位,每张海报完全的覆盖一段连续的墙体,墙体 ...
- 【BZOJ 3529】 [Sdoi2014]数表 (莫比乌斯+分块+离线+树状数组)
3529: [Sdoi2014]数表 Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有 ...
- [topcoder]IncreasingSubsequences
http://community.topcoder.com/stat?c=problem_statement&pm=7753&rd=10672 http://community.top ...
- lubuntu安装maven
原文转自:jobar.iteye.com/blog/1776747 1 apt-cache search maven 获取所有可用的maven包 2 sudo apt-get install mave ...
- CRC算法及C实现
一.CRC算法原理 CRC校验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校 验用的监督码(既CRC码)r位,并附在信息后边,构成一个新的二进制码序列数 ...
- http实现发送post请求,获取结果集
package com.ming; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.Ou ...
- 用SQL描述树
/*40条(1层) SELECT COUNT(*) FROM t01_mwfl WHERE AZFSDM=01 AND LEVEL=1 START WITH PID=0 CONNECT BY PRIO ...
- bat坐拥大数据。数据挖掘/大数据给他们带来什么。
阿里巴巴CTO即阿里云负责人王坚博士说过一句话:云计算和大数据,你们都理解错了. 实际上,对于大数据究竟是什么业界并无共识.大数据并不是什么新鲜事物.信息革命带来的除了信息的更高效地生产.流通和消 ...