【转】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 ...
随机推荐
- Desert King
poj2728:http://poj.org/problem?id=2728 题意:给你n的点,每一个点会有一个坐标(x,y),然后还有一个z值,现在上你求一棵生成树,是的这棵生成树的所有边的费用/所 ...
- 【BZOJ1901】 Zju2112 Dynamic Rankings(树套树)
[题意] 给定一个含有n个数的序列a[1],a[2],a[3]--a[n], 程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]--a[j]中第k小的数是多少(1≤k ...
- [转贴]C++、C#写的WebService相互调用
以下宏文(原文在 http://blog.sina.com.cn/s/blog_4e7d38260100ade4.html),是转贴并进行了修饰编辑: 首先感谢永和兄提供C++的WebService服 ...
- STL set multiset map multimap unordered_set unordered_map example
I decide to write to my blogs in English. When I meet something hard to depict, I'll add some Chines ...
- oracle时间模型
Oracle在9i或者早期的版本,对于性能优化方面,主要采用命中率模型,后面的版本,也保留着命中率模型,比如在awr报告中,Instance Efficiency Percentages (Targe ...
- c#生成注册码的两种方法(mac地址与IP地址)
using System; using System.Management; using System.Security.Cryptography; using System.IO; using Sy ...
- SQL Server select into用法
作用: SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中. SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档 这个语句会在数据库中用和你所指定的列类型和 ...
- 【转】Android中设置TextView的颜色setTextColor--代码中设置字体颜色
原文网址:http://www.cnblogs.com/myphoebe/archive/2012/01/06/2314728.html android中设置TextView的颜色有方法setText ...
- JavaScript向表格中添加按钮和文本输入框
例子: <?php ?> <html> <head> <meta http-equiv="Content-Type" content=&q ...
- 动态规划(DP计数):HDU 5117 Fluorescent
Matt, a famous adventurer who once defeated a pack of dire wolves alone, found a lost court. Matt fi ...