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节点和精灵节点的坐标、位置以及大小的设置相关推荐

  1. iFIERO -- (一) 宇宙大战 SPACE BATTLE — 新建场景SCENE、精灵节点、PARTICLE粒子及背景音乐

    开始游戏教程前,首先介绍一下SpriteKit是什么? SpriteKit提供了一个图形渲染和动画的基础结构,你可以使用它让任意类型的纹理图片或者精灵动起来.SpriteKit使用传统的渲染循环,在每 ...

  2. Udacity机器人软件工程师课程笔记(十二)-ROS-编写更复杂的ROS节点(arm_mover节点 和 look_away 节点)

    更复杂的ROS节点 1. Arm_mover节点 为了打好更好的基础,这是在Arm_mover节点还需要学习的内容 自定义消息生成 服务 参数 启动文件 为了理解上述内容,我们将编写另一个名为arm_ ...

  3. HTMLDOM中三种元素节点、属性节点、文本节点的测试案例

    HTML dom中常用的三种节点分别是元素节点.属性节点.文本节点. 具体指的内容可参考下图: 以下为测试用例: <!DOCTYPE html> <html><head& ...

  4. xpath 获取当前节点的父节点,兄弟节点的方法

    2019独角兽企业重金招聘Python工程师标准>>> xpath_input_exp_mark = '//label[contains(text(), "文本内容&quo ...

  5. HTML保存节点,{HTML5}DOM节点操作-第一节

    ​DOM 中有一个非常重要的功能,就是节点模型,也就是 DOM 中的"M".页面中的元素结构就是通过这种节点模型来互相对应着的,只需要通过这些节点关系,可以创建.插入.替换.克隆. ...

  6. sql查询父节点所有子节点id_5招搞定SQL棘手问题,同事看到直呼“内行”

    对于数据科学家来讲,SQL(结构化查询语言)是其工具箱中比较重要的工具之一.掌握SQL不仅有助于你在面试中脱颖而出,而且通过解决复杂查询达到对SQL的充分理解,还能在让你许多竞争中保持领先地位. 查询 ...

  7. linux 节点信,DOM 节点信息

    DOM 节点信息 nodeName.nodeValue 和 nodeType 属性包含有关节点的信息. 尝试一下 - 实例 下面的实例使用 XML 文件 books.xml. 函数 loadXMLDo ...

  8. 交换链表的奇数节点和偶数节点

    #ifndef LINKLIST_H_ #define LINKLIST_H_ struct Node {     Node* ptr_;     int data_; Node():ptr_(0), ...

  9. sql 树状结构中知道 父节点与孙节点_集群环境中使用Zookeeper实现分布式幂等控制...

    一.什么是Zookeeper? Zookeeper(业界简称zk)是一种提供配置管理.分布式协同以及命名的中心化服务,这些提供的功能都是分布式系统中非常底层且必不可少的基本功能,但是如果自己实现这些功 ...

最新文章

  1. 我是架构师-设计模式-工厂模式-工厂方法
  2. c#中邮件收发处理(POP3,IMAP,SMTP)的实现方法
  3. leetcode 318. Maximum Product of Word Lengths | 318. 最大单词长度乘积
  4. Android:在安卓中使用TFLite模型
  5. Android 使用控件自定义背景实例
  6. bigdecimal如何做除法_二胎家庭如何平衡两个孩子的关系?聪明的父母都懂这四个法则...
  7. php orm 链式,关于php:雄辩的ORM中的交叉和分页
  8. ai文件图片连接丢失怎么处理_图片文字识别提取,再也不用辛苦码字了
  9. Python版组合数计算方法优化思路和源码
  10. 【Eclipse使用教程】最全的Eclipse快捷键
  11. 图像处理之全景拼接---基于sift的全景图像拼接
  12. 定时任务时间表达式的规则
  13. 商城商品的知识图谱构建
  14. 多台电脑之间共享键盘鼠标
  15. 前端 JS 根据日期查询周几 星期几
  16. 从入门到放弃,50G编程视频免费送!
  17. linux ps-x,Linux总结----PS命令
  18. 《麦肯锡精英的48个工作习惯》书评
  19. C++ accumulate函数介绍、具体案例
  20. 为什么国外服务器域名备案可以不进行?

热门文章

  1. 华为数通笔记-BGP选路与负载分担
  2. android 通知栏设置,安卓手机通知栏介绍:安卓手机通知栏设置方法
  3. 教你修改电脑mac地址图解教程
  4. The following classes could not be found - EditText (Change to android.widget.EditText, Fix Build Pa
  5. 吉他(guitar)
  6. 微信小程序---全局/本地存储
  7. 开启ICT宝藏之门——CloudOpera IES 创新社区正式成立
  8. oracle中笛卡尔积怎么用,Oracle的表连接方法(四)笛卡尔积
  9. linux系统mysql密码忘记了怎么办_Linux中MySQL密码忘了怎么办
  10. 【转】Android Protobuf应用及原理