cocos2d-x中锚点设置及定位方式
问题
在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->setAnchorPoint(ccp(0, testLayer->setPosition(ccp(50, testLayer->setContentSize(CCSizeMake(300, this ->addChild(testLayer); CCLOG( "testlayer , testLayer->boundingBox().origin.x, |
打印的结果是 (50, -200); 这个是正常的结果;
可是假设将testLayer的类型换成 CCLayer (也就是上面加了凝视那句), 值就变成了 (50, 100)
不知道是哪里的问题??
我的理解 CCLayer 仅仅是在 CCNode上加了一些事件代理, 应该没本质的差别才对. 这里是什么原因呢?
但 CCLayer 里这个值是false, 也就是CCLayer根本不适用锚点, 所以会有坐标计算问题
cocos2d-x中锚点设置及定位方式的更多相关文章
- 【转】cocos2d-x中锚点设置及定位方式
http://blog.csdn.net/wayne5ning/article/details/8160506 说在前面:以下是基于cocos2d-2.0-x-2.0.3作的总结 问题 在cocos2 ...
- 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 ...
- (转)CSS中的绝对定位与相对定位定位
层级关系为: <div ——————————— position:relative; 不是最近的祖先定位元素,不是参照物<div—————————-没有设置为定位元素,不是参照物<d ...
- 关于iOS地图定位中点击设置->隐私->定位服务 闪退问题
iOS8之后,如果应用中用到了地图定位,那么点击设置->隐私->定位服务 再点击该应用有时候会出现闪退问题,其原因是iOS8之后定位中添加了 NSLocationWhenInUseDesc ...
- struts2中constant参数设置
序号 方法 说明 1 <constant name="struts.i18n.encoding" value="UTF-8"/> 指定web应用默认 ...
- 在Fragment中实现百度地图,定位到当前位置(基于SDKv2.1.0)
使用最新版本的百度地图需要注意的几个地方: 1.libs文件夹下要有android-support-v4.jar.baidumapapi_v2_1_0.jar.locSDK_3.1.jar三个jar包 ...
随机推荐
- GIT的简介
本文来自:https://www.breakyizhan.com/git/32.html 这篇GIT教程提供了GIT的基本和高级概念,主要是面向GIT的初学者和专业人士来编写的. 什么是GIT呢? G ...
- Linux离线安装redis集群
一.应用场景介绍 本文主要是介绍Redis集群在Linux环境下的安装讲解,联网环境安装较为简单,这里只说脱机的Linux环境下是如何安装的.因为大多数时候,公司的生产环境是在内网环境下,无外网,服务 ...
- 实现验证的vsftpd虚拟用户
实现基于文件验证的vsftpd虚拟用户--(一台) 一.创建用户数据库文件 vim /etc/vsftpd/vuser cd /etc/vsftpd/ db_load -T -t hash -f vu ...
- 南邮CTF--md5_碰撞
南邮CTF--难题笔记 题目:md5 collision (md5 碰撞) 解析: 经过阅读源码后,发现其代码是要求 a !=b 且 md5(a) == md5(b) 才会显示flag,利用PHP语言 ...
- 关于Kubernetes v1.14.0的 kube-controller-manager部署
1. kube-controller-manager准备 默认kube-controller-manager 部署在kube-apiserver部署的服务器上面服务器的配置等在这就不在列出来 二进制文 ...
- Python数据分析 Pandas模块 基础数据结构与简介(一)
pandas 入门 简介 pandas 组成 = 数据面板 + 数据分析工具 poandas 把数组分为3类 一维矩阵:Series 把ndarray强大在可以存储任意数据类型可以专门处理时间数据 二 ...
- POJ 3169 Layout(差分约束 线性差分约束)
题意: 有N头牛, 有以下关系: (1)A牛与B牛相距不能大于k (2)A牛与B牛相距不能小于k (3)第i+1头牛必须在第i头牛前面 给出若干对关系(1),(2) 求出第N头牛与第一头牛的最长可能距 ...
- 公钥加密算法那些事 | RSA 与 ECC 系统对比
一.背景 据记载,公元前 400 年,古希腊人发明了置换密码.1881 年世界上的第一个电话保密专利出现.在第二次世界大战期间,德国军方启用「恩尼格玛」密码机,密码学在战争中起着非常重要的作用. 随着 ...
- [luoguP2618] 数字工程(DP)
传送门 离线处理... 先线性筛一遍. 直接预处理出所有答案. 注意要用push,用乘法,常数小. #include <cstdio> #include <cstring> # ...
- 51nod1135 原根
原根判定:$m>2$,$\varphi (m)$的不同素数是$q_1,q_2,……,q_s$,$(g,m)=1$,则$g$是$m$的一个原根的充要条件是$g^{\frac{\varphi(m)} ...