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中锚点设置及定位方式的更多相关文章

  1. cocos2d-x中锚点设置及定位方式

    问题 在cocos2d演示样例代码HelloCpp中,为什么要将CCMenu设置位置到CCPointZero,即使CCMenu的锚点是在(0.5, 0.5)? 回答 这是由于CCMenu没有使用锚点进 ...

  2. htnl中的遮罩层以及定位方式

    在页面显示遮罩层,例如:一个div的css样式: $msk.css({ "top":"0", "left":"0", & ...

  3. Flex 4中组件背景设置(填充方式)group为例子

    以下以Group为例子讲述如何在Flex 4中填充背景颜色.图片: 1.图片填充方式: <s:Group x="0" y="0" height=" ...

  4. html中的锚点设置

    html中的锚点 一.页面内跳转的锚点设置 页面内的跳转需要两步: 方法一: ①:设置一个锚点链接去找喵星人:(注意:href属性的属性值最前面要加#) ②:在页面中需要的位置设置锚点<a na ...

  5. HTML中的锚点设置和table格式

    锚点设置: <a href="#1">锚点</a> <a name="1"></a> table表格格式: &l ...

  6. 如何在cocos2d项目中enable ARC

    如何在cocos2d项目中enable ARC 基本思想就是不支持ARC的代码用和支持ARC的分开,通过xcode中设置编译选项,让支持和不支持ARC的代码共存. cocos2d是ios app开发中 ...

  7. SpriteBuilder中锚点的一般用法

    注意:改变节点的锚点(anchor point)将会影响缩放和旋转操作,也会影响边界边框和碰撞的检测. 锚点仅仅挪动节点的视觉表现,这种改变可能与物理表现不一致. 你绝不应该错误的挪动锚点去改变节点的 ...

  8. 转-ArcGIS Engine中的License设置

    AE开发中的License有两种方法进行设置,一种是通过LicenseControl控件,另一种是通过IAoInitialize接口设置.整个应用程序中只能有一种方式存在,如果进行了两种License ...

  9. Android中的颜色设置

    1.在android中经常看到设置的颜色为八位的十六进制的颜色值,例如 public static final class color { public static final int lightb ...

随机推荐

  1. 使用jxl.jar操作Excel

    在工程的build path中添加jxl.jar,网址:http://www.andykhan.com/jexcelapi/ import java.io.BufferedReader; import ...

  2. phpStorm 使用技巧大集合

    之前整理了一部分使用技巧了,但是在实际操作中发现phpstorm的技巧实在是太多了,所以大部分都统一整理到这篇文字中 ,备用 插件1 1:phpstrom的插件Provides live edit H ...

  3. poj1436 Horizontally Visible Segments

    这是一个区间更新的题目,先将区间放大两倍,至于为什么要放大可以这样解释,按照从左到右有4个区间,y值是[1,5],[1,2],[3,4],[1,4]如果不放大的话,查询[1,4]区间和前面区间的”可见 ...

  4. Android 4.0设计规范 优先导读 十大改变

    在拜读和翻译了 Android design 设计指导后,对比 Android 4.0 与 Android2.3 及之前版本的 app 设计指导,总结了 Android 4.0 设计的 10 大改变: ...

  5. iframe的安全问题

    今天尝试在iframe中嵌入外部网站, 碰到了一些小问题. 如何让自己的网站不被其他网站的iframe引用? 我测试的时候发现我把iframe的src指定到github不起作用. 原来是它把X-Fra ...

  6. sql server 自定义函数

    create function 函数名 (@pno int) returns int as begin declare @a int if not exists(select * from perso ...

  7. HDU --1251

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

  8. ASP.NET MVC利用PagedList分页(二)PagedList+Ajax+JsRender

    (原文) 昨天在ASP.NET MVC利用PagedList分页(一)的 最后一节提到,一个好的用户体验绝对不可能是点击下一页后刷新页面,所以今天来说说利用Ajax+PagedList实现无刷新(个人 ...

  9. 深入设计模式(二)——单例模式(Singleton Pattern)

    一.单例模式介绍 单例模式(Singleton Pattern),保证一个类只有一个实例,并提供一个访问它的全局访问点.单例模式因为Singleton封装它的唯一实例,它就可以严格地控制客户怎样访问它 ...

  10. 为虚拟机搭建MacOSX系统

    发现一篇正确的安装文章,转载自:http://blog.imqyc.com/2013/05/29/vritual-MacOS/ 今年新买了一个笔记本电脑,本打算购入心仪已久的Macbook Pro 1 ...