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. jQuery制作Web全屏效果

    需要的资源 1.jQuery版本库是必不可少的2.jQuery FullScreen plugin如果你下载不方便的话,你可以直接把下面的代码copy到你本地JQuery FullScreen plu ...

  2. bzoj 3527: [Zjoi2014]力 快速傅里叶变换

    题意: 给出n个数qi,给出Fj的定义如下:  令Ei=Fi/qi,求Ei. fft的那一堆东西还是背不到啊...这次写虽说完全自己写的,但是还是在参见了以前fft程序的情况下调了很久,主要在如下几点 ...

  3. Android java程序获取assets资产文件

    AssetManager assetManager=this.getAssets(); inputStream = assetManager.open("test.xml");

  4. Linq 筛选出一条数据

    InBoxInfo boxInfo = boxList.Find(p => p.GoodsID == goods.GoodsID.ToString().Trim() && p.S ...

  5. 【POJ 1741】 Tree (树的点分治)

    Tree   Description Give a tree with n vertices,each edge has a length(positive integer less than 100 ...

  6. 使用AspNetPager与GridView完成分页

    使用AspNetPager与GridView完成分页   由于GridView的分页功能实在是太弱了,所以需要使用强大的AspNetPager来作为分页控件.最简单的办法就是GridView控件下面接 ...

  7. WPA Supplicant 用法

    本文译至:https://wiki.archlinux.org/index.php/WPA_Supplicant_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29 ...

  8. 还能输入多少字?(JS动态计算)

    <div class="m-form ovh"> <div class="hd"> <span class="fr&qu ...

  9. java 判断字符串是否为乱码

    import java.util.regex.Matcher; import java.util.regex.Pattern; public class MessyCodeCheck { public ...

  10. codeforce

    A. Playing with Dice time limit per test 1 second memory limit per test 256 megabytes input standard ...