问题

在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作为根节点,easy操作的方式都是将锚点设置到(0.5, 0.5),而且使用锚点进行定位。

    所以假设使用CCScene须要设定CCNode::m_bIgnoreAnchorPointForPosition=false。而假设使用CCNode须要设定CCNode::setAnchorPoint(ccp(0.5, 0.5))

getAnchorPointInPixel

对于锚点在中心(0.5, 0.5)的结点,使用getAnchorPointInPixel获取到的是此结点的中心坐标。

利用此接口,能够方便地定位到结点的中心。

当然。使用getContentSize取半也能够。此信息用于对齐结点非常实用处。

CCLayer与CCNode的boundingBox值怎么不一样?

刚才測试出一个奇怪的问题,代码例如以下:

1
2
3
4
5
6
7
8
9
10
CCNode*
testLayer = CCNode::create();
//
CCNode* testLayer = CCLayer::create();
 
testLayer->setAnchorPoint(ccp(0,
1));
testLayer->setPosition(ccp(50,
100));
testLayer->setContentSize(CCSizeMake(300,
300));
this->addChild(testLayer);
 
CCLOG("testlayer
boundingBox: (%f, %f)"
,
  testLayer->boundingBox().origin.x,
testLayer->boundingBox().origin.y);

打印的结果是 (50, -200); 这个是正常的结果;

可是假设将testLayer的类型换成 CCLayer (也就是上面加了凝视那句), 值就变成了 (50, 100)

不知道是哪里的问题??

我的理解 CCLayer 仅仅是在 CCNode上加了一些事件代理, 应该没本质的差别才对. 这里是什么原因呢?

原因是CCNode里有个属性: m_bIgnoreAnchorPointForPosition 表示是否使用锚点定位, 默认是true

但 CCLayer 里这个值是false, 也就是CCLayer根本不适用锚点, 所以会有坐标计算问题

cocos2d-x中锚点设置及定位方式的更多相关文章

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

    http://blog.csdn.net/wayne5ning/article/details/8160506 说在前面:以下是基于cocos2d-2.0-x-2.0.3作的总结 问题 在cocos2 ...

  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. (转)CSS中的绝对定位与相对定位定位

    层级关系为: <div ——————————— position:relative; 不是最近的祖先定位元素,不是参照物<div—————————-没有设置为定位元素,不是参照物<d ...

  7. 关于iOS地图定位中点击设置->隐私->定位服务 闪退问题

    iOS8之后,如果应用中用到了地图定位,那么点击设置->隐私->定位服务 再点击该应用有时候会出现闪退问题,其原因是iOS8之后定位中添加了 NSLocationWhenInUseDesc ...

  8. struts2中constant参数设置

    序号 方法 说明 1 <constant name="struts.i18n.encoding" value="UTF-8"/> 指定web应用默认 ...

  9. 在Fragment中实现百度地图,定位到当前位置(基于SDKv2.1.0)

    使用最新版本的百度地图需要注意的几个地方: 1.libs文件夹下要有android-support-v4.jar.baidumapapi_v2_1_0.jar.locSDK_3.1.jar三个jar包 ...

随机推荐

  1. Linux基础测试

    目 录 第1章 文件及目录课后作业    1 第2章 Linux打包与压缩习题    1 第3章 Linux系统VIM编辑器习题    1   文件及目录课后作业 从/proc/meminfo中过滤出 ...

  2. 关于在Safari浏览器中将网页添加到主屏幕的相关设置(自定义图标,启动动画,自定义名称)

    在ios中我们可以使用Safari浏览自带的将网页添加到主屏幕上,让我们的web页面看起来像native那样 第一步: 第二步: 第三步: 到这里还没结束:我们还要进行相关设置才能使我们的应用更像原生 ...

  3. Sql按照字段分组,选取其他字段最值所在的行记录

    引言: 为什么会引入这个问题,在程序中遇到这样的问题,在某个数据表中,相同的AID(项目ID)被多次添加到数据表中,所以对应于不同的时间,只想选取添加时间最早的哪一条记录. 参考:红黑联盟 所用到的数 ...

  4. Nginx的启动过程

    主要介绍Nginx的启动过程,可以在/core/nginx.c中找到Nginx的主函数main(),那么就从这里开始分析Nginx的启动过程. 涉及到的基本函数 源码:  View Code Ngin ...

  5. CSS小知识点一

    1.   text-indent属性    缩进文本 通过使用 text-indent 属性,所有元素的第一行都可以缩进一个给定的长度,甚至该长度可以是负值.这个属性最常见的用途是将段落的首行缩进,一 ...

  6. Fiddler抓包-工具介绍(request和response)

    from:https://www.cnblogs.com/yoyoketang/p/6731121.html 本篇简单的介绍下fiddler界面的几块区域,以及各自区域到底是干什么用的,以便于各好的掌 ...

  7. 大数据学习——linux常用命令(二)四

    系统管理操作 1 挂载外部存储设备 可以挂载光盘.硬盘.磁带.光盘镜像文件等 1/ 挂载光驱 mkdir   /mnt/cdrom      创建一个目录,用来挂载 mount -t iso9660 ...

  8. [Go]字典(map)的操作和约束

    字典(map)存储的是键值对(key-value pair,一个键值对代表了一对键和值.一个键和一个值分别代表了一个从属于某一类型的独立值,把它们两个捆绑在一起就是键值对,也称“键-元素对”)的集合 ...

  9. HDU 1402 大数乘法 FFT、NTT

    A * B Problem Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  10. 开头第一篇Hello World

    以前在折腾个人博客的时候,使用过的WordpPress.Z-Blog.Typecho建站程序,开头第一篇都是Hello World,作为程序员的社区,开头第一篇当然也要是Hello World! 一句 ...