关于Cocos2d-x节点和精灵节点的坐标、位置以及大小的设置
1.cocos2d-X中的坐标(0,0),就是运行框的左下角位置,所以运行框看起来就是一个第一象限。
2.节点的锚点就是我们setPosition所设定的位置,默认锚点是在节点的中心,也就是setPosition方法设定的坐标的位置,比如setPosition(visibleSize.width/2,visibleSize.height/2),就是把图片放在运行框的最中央。
3.如果想改变锚点,可以用setAnchorPoint方法来设定,setAnchorPoint的坐标是以节点(图片)为相对的坐标系,比如sprite->setAnchorPoint(Vec2(0, 0)),就是把锚点设定在sprite节点的左下角,这时候如果再sprite->setPosition(0,0),就会把图片放在运行框的左下角。再比如sprite->setAnchorPoint(Vec2(0.5, 0.5)),就是把锚点设定在sprite节点的中心,这时候如果再sprite->setPosition(visibleSize.width/2,visibleSize.height/2),就会把图片放在运行框中心。
4.sprite->getContentSize()方法是获得sprite节点的大小,是一个Vec2类型的值,有width和height的属性。
注意:
1.setAnchorPoint方法的参数只有一个,就是一个Vec2类型的变量,而且参数是Vec(0到1,0到1)的常量,不能用变量,Vec2(0,0)表示把锚点设置在节点左下角,Vec2(1,1)表示把锚点设置在节点右上角,Vec2(0.5,0.5)表示把锚点设置在节点中心,以此类推。
2.继承自Node类型的节点的初始锚点在左下角Vec2(0,0),继承自Sprite类型的节点的初始锚点在中心Vec2(0.5,0.5)
2.继承自Node类型的节点的初始锚点在左下角Vec2(0,0),继承自Sprite类型的节点的初始锚点在中心Vec2(0.5,0.5)
2.继承自Node类型的节点的初始锚点在左下角Vec2(0,0),继承自Sprite类型的节点的初始锚点在中心Vec2(0.5,0.5)
setTextureRect(Rect(0, 0, 50, 50));方法是设置精灵节点的纹理的初始位置和初始大小,比如这时候Rect(0, 0, 50, 50)就表示,初始的精灵节点是在屏幕坐标(0,0)也就是左下角的位置,大小方面,宽是50,高是50,由于一般在实例化创建对象后,都会规范化地另外使用setPosition方法来设置节点的位置,所以这个setTextureRect(Rect(0, 0, 50, 50));里面的初始位置的设置在我看来没什么意义。这个方法主要是设置一些纯色的精灵节点的时候会用到,把纹理设置成(50,50)大小的纯色。如果后面有用到setTexture方法来改变纹理,那么setTextureRect的纹理大小(50,50)会被覆盖。
setTexture("s_1.png");方法是设置精灵节点的纹理图案,同时会自动把图案的大小设置成精灵节点纹理的大小,这个方法也会覆盖setTextureRect(Rect(0, 0, 50, 50));中设置设置精灵节点的纹理的初始大小的方法,也就是里面的(50,50)没有作用,被s_1.png这个图案本身的大小(自己PS设置的)给覆盖了。
getContentSize()方法是获得未转换的节点的大小,就是未经过缩放旋转的节点或者精灵节点的大小。如果是继承自Node的普通节点,那么获得的就是setContentSize()所设置的大小,如果是继承自Sprite的精灵节点,那么获得的就是纹理的大小,如果纹理是用setTexture("s_1.png");设置的图案纹理,那么获得的大小就是图片的大小,如果纹理是setTextureRect(Rect(0, 0, 50, 50));设置的纯色纹理,那么获得的大小就是(50,50)。
setContentSize()方法是设置未转换的节点的大小,设置的值就是还没有经过缩放旋转的节点或者精灵节点的大小,以后缩放或者旋转都会以这个值为原始的比例值。继承自Node的节点比较常用,继承自Sprite的精灵节点一般不用,而是用setTexture("s_1.png");里面的图片大小作为精灵节点的大小。
setScale(0.5);方法会把节点或者精灵节点进行缩放,这个效果还会作用于该节点的所有子节点。0.5就是缩一半,1就是原始大小,2就是扩大一倍。如果是节点的话在缩放后,节点大小会改变,如果是精灵节点的话在缩放后,图片大小和精灵节点大小都会改变,不过一般图片大小是等于精灵节点大小的。
setScaleX(0.5);方法会把节点或者精灵节点的宽度进行缩放,这个效果还会作用于该节点的所有子节点。0.5就是缩一半,1就是原始大小,2就是扩大一倍。如果是节点的话在缩放后,节点大小会改变,如果是精灵节点的话在缩放后,图片大小和精灵节点大小都会改变,不过一般图片大小是等于精灵节点大小的。是以锚点为定点开始扩展延伸的。
setScaleY(0.5);方法会把节点或者精灵节点的高度进行缩放,这个效果还会作用于该节点的所有子节点。0.5就是缩一半,1就是原始大小,2就是扩大一倍。如果是节点的话在缩放后,节点大小会改变,如果是精灵节点的话在缩放后,图片大小和精灵节点大小都会改变,不过一般图片大小是等于精灵节点大小的。是以锚点为定点开始扩展延伸的。
setVisible(false);方法会把精灵节点的纹理变得不可见,就是图片资源看不见,但是如果已经绑定了一个刚体的话,在有调试框的情况下还是可以看见刚体,也就是说刚体不会隐藏起来,而隐藏刚体就必须用物理引擎类中的隐藏刚体的方法。
setPosition();方法设置节点或者精灵节点的位置,如果没有写这句话直接addchild的话是默认设置位置为(0,0)。
注意:
如果在继承自Sprite的精灵节点的初始化中,已经用setTexture("s_1.png");设置了它的纹理图案和节点大小(大小是自动适配图片大小的),这时候如果再用
Size s = Size(180, 180);
setContentSize(s);
来强行设置一个Size类型的变量s,再强行设置精灵节点的大小,如果这个s的大小和图片的大小不一致,而我们又用
setPhysicsBody(PhysicsBody::createBox(this->getContentSize()));来设置精灵节点的物理刚体的时候,
就会出现图片和刚体边界错位的情况。所以最好是不要设置完图片纹理后,又自己去人为修改精灵节点的大小。如果非要用这个方法的话,就把变量s的值设置成和图片s_1.png一样的大小,或者比图片稍微小一点,这样可以去除一些空白的区域,这样设置刚体检测碰撞的时候就更加精确。
注意
getContentSize();
获取精灵的逻辑尺寸。此值不受缩放变换影响。即setScale()方法不影响此值
boundingBox().size;
获取精灵的边框尺寸。此值受到缩放变换影响。
getTexture()->getContentSizeInPixels();
获取精灵的纹理的像素尺寸。
像素点和逻辑点关系:逻辑点大小 = 像素大小/contentScale
例子:
Size sizeByContentSize = pBackground->getContentSize();
Size sizeByboundingBox = pBackground->boundingBox().size;
Size sizeByPoints = pBackground->getTexture()->getContentSizeInPixels();
LOG("sizeByContentSize:width:%f height:%f",sizeByContentSize.width,sizeByContentSize.height);
LOG("sizeByboundingBox:width:%f height:%f",sizeByboundingBox.width,sizeByboundingBox.height);
LOG("sizeByPoints:width:%f height:%f",sizeByPoints.width,sizeByPoints.height);
pBackground->setScale(2);
LOG("转变后:");
sizeByContentSize = pBackground->getContentSize();
sizeByboundingBox = pBackground->boundingBox().size;
sizeByPoints =pBackground->getTexture()->getContentSizeInPixels();
LOG("sizeByContentSize:width:%f height:%f",sizeByContentSize.width,sizeByContentSize.height);
LOG("sizeByboundingBox:width:%f height:%f",sizeByboundingBox.width,sizeByboundingBox.height);
LOG("sizeByPoints:width:%f height:%f",sizeByPoints.width,sizeByPoints.height);
Cocos2d: sizeByContentSize:width:114.000000 height:114.000000
Cocos2d: sizeByboundingBox:width:114.000000 height:114.000000
Cocos2d: sizeByPoints:width:114.000000 height:114.000000
Cocos2d: 转变后:
Cocos2d: sizeByContentSize:width:114.000000 height:114.000000
Cocos2d: sizeByboundingBox:width:228.000000 height:228.000000
Cocos2d: sizeByPoints:width:114.000000 height:114.000000
关于Cocos2d-x节点和精灵节点的坐标、位置以及大小的设置的更多相关文章
- 关于Cocos2d-x中节点和精灵的关系以及初始化
1.每一个对象类都有一个自己public的一个create函数(等价于CREATE_FUNC),和init函数. 2.create函数返回的是自身的类型,init函数是在ceate函数被调用的时候自动 ...
- JQuery_DOM 节点操作之创建节点、插入节点
一.创建节点 为了使页面更加智能化,有时我们想动态的在html 结构页面添加一个元素标签,那么在插入之前首先要做的动作就是:创建节点 <script type="text/javasc ...
- 通过ajax 后台传递的 区域id 选中ztree的节点 并展开节点
代码如下: < script type = "text/javascript" > var flag = "<%=request.getParam ...
- 【转】JavaScript获取节点类型、节点名称和节点值
DOM节点信息包括节点类型(nodeType).节点名称(nodeName)和节点值(nodeValue). 节点类型 DOM节点中,每个节点都拥有不同的类型.W3C规范中常用的 DOM节点类型有以下 ...
- 初探JavaScript(一)——也谈元素节点、属性节点、文本节点
Javascript大行其道的时候,怎么能少了我来凑凑热闹^_^ 基本上自己对于js的知识储备很少,先前有用过JQuery实现一些简单功能,要论起JS的前世今生,来龙去脉,我就一小白.抱起一本< ...
- HTMLDOM中三种元素节点、属性节点、文本节点的测试案例
HTML dom中常用的三种节点分别是元素节点.属性节点.文本节点. 具体指的内容可参考下图: 以下为测试用例: <!DOCTYPE html> <html> <head ...
- hdfs 名称节点和数据节点
名字节点(NameNode )是HDFS主从结构中主节点上运行的主要进程,它指导主从结构中的从节点,数据节点(DataNode)执行底层的I/O任务. 名字节点是HDFS的书记员,维护着整个文件系统的 ...
- 节点操作-创建并添加&删除节点&替换&克隆节点
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" ...
- STL---Codeforces675D Tree Construction(二叉树节点的父亲节点)
Description During the programming classes Vasya was assigned a difficult problem. However, he doesn ...
随机推荐
- Android 监听 Android中监听系统网络连接打开或者关闭的实现代码
本篇文章对Android中监听系统网络连接打开或者关闭的实现用实例进行了介绍.需要的朋友参考下 很简单,所以直接看代码 复制代码 代码如下: package xxx; import android.c ...
- Linux内核(13) - 子系统的初始化之以PCI子系统为例
由Kconfig这张地图的分布来看,PCI这块儿的代码应该分布在两个地方,drivers/pci和arch/i386/pci,两岸三地都属于一个中国,不管是drivers/pci那儿的,还是arch/ ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第13章节--使用业务连接服务创建业务线解决方式 SP Apps中的BCS
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第13章节--使用业务连接服务创建业务线解决方式 SP Apps中的BCS 之前的联系中,你安装了一个业 ...
- 在Debug模式下中断, 在Release模式下跳出当前函数的断言
在Debug模式下中断, 在Release模式下跳出当前函数的断言 #ifdef DEBUG #define __breakPoint_on_debug asm("int3") # ...
- PowerDesigner列名作为注释
Tools -> Execute Commands -> Edit/Run Script 执行以下脚本: Option Explicit ValidationMode = True Int ...
- Sql 列转行 三种方法对比
合并列值 --******************************************************************************************* ...
- php DES加密或者解密
function pkcs5_pad ($text, $blocksize) { //加密时的字节填充,保持和java 一致 $pad = $blocksize - (strlen($text) % ...
- centos 6.5 文件目录管理
Linux不存在像Windows那样分盘符的概念,Linux在安装之后就以文件目录的形式来进行管理,存储.即当我们安装完系统之后,我们就会看到有一堆的目录出现在根目录下.同时Linux使用正斜杠“/” ...
- cocos2dx 3.x fullPathForFilename及isFileExist在ios/mac下与win32下行为不同
一,fullPathForFilename 项目先开发了ios/mac版本,这两天想把win32工程也配好,但遇到了部分资源无法正确找到的问题. 进一步观察发现,对于那些找不到的资源路径,fullPa ...
- 已有iptables表的查看
查看已有iptables表 iptables -L -nv --line-number-L是--list的简写,作用是列出规则-n是ip以数字方式显示,有的会用域名方式显示.-v是显示详细信息 v=v ...