节点与坐标系——Cocos2d-x学习历程(十)
1.Node
Cocos2d-x把渲染树上的每一个游戏元素抽象为一个节点,即Node。一切游戏元素都继承自Node,因此它们都具有Node所提供的特性。Node定义了一个可绘制对象的通用特性,包括位置、缩放、是否可见、旋转角度等。
节点的最基本的功能包括:(1)包含其他CCNode对象;(2)接受各种事件与回调函数,如定时器事件;(3)运行动作。
渲染树中包含着许多子节点的Node,类似一张画布,允许其他画布以不同的顺序叠加覆盖在自己上面,一旦改变该节点的缩放和旋转等特性,就会影响该节点(包括它的子节点)的显示效果。
2.坐标系
在Cocos2d-x中,存在两种坐标系。绘图坐标系和纹理坐标系。
绘图坐标系,它是最常见的坐标系,与OpenGL采用的坐标系相同,以左下角为原点,向右为x轴正方向,向上为y轴正方向。在Cocos2d-x中,一切绘图相关的操作都使用绘图坐标系,如游戏元素中的Position和AnchorPoint等属性。
纹理坐标系。纹理坐标系以左上角为原点,向右为x轴正方向,向下为y轴正方向。在Cocos2d-x中,只有从纹理中截取部分矩形时才使用这个坐标系,如Sprite的TextureRect属性。
3.绘图属性
利用Sprite所拥有的绘图相关属性,我们可以对精灵呈现的方式进行精确的控制。
(1)CCRect ContentSize:获取或设置此节点的内容大小。任何一个节点都需要确定它的内容大小,以便进行图形变换。 对于精灵来说,ContentSize是它的纹理显示部分的大小;对于层或场景等全屏的大型节点来说,ContentSize则是屏幕大小。
(2)CCPoint AnchorPoint:AnchorPoint用于设置一个锚点,以便精确地控制节点的位置和变换。AnchorPoint的两个参量x和y的取值通常都是0到1之间的实数,表示锚点相对于节点长宽的位置。例如,把节点左下角作为锚点,值为(0,0);把节点的中心作为锚点,值为(0.5,0.5);把节点右下角作为锚点,值为(1,0)。精灵的AnchorPoint默认值为(0.5,0.5),其他节点的默认值为(0,0)。
(3)Position用于设置节点的位置。由于Position指的是锚点在父节点中的坐标值,节点显示的位置通常与锚点有关。因此,如果层与场景保持默认的位置,只需把层中精灵位置设为窗口长宽的一半即可让它显示在屏幕中央。
(4)float Rotation:获取或设置节点的旋转角度。节点以自己的锚点为中心顺时针旋转一定量,单位是角度。旋转角度可以是任意实数。
(5)float Scale(以及float ScaleX与float ScaleY):Scale用于获取或设置节点的缩放比例。节点以锚点为中心缩放该比例。Scale的值代表整体缩放比例,而ScaleX与ScaleY分别代表X方向与Y方向的缩放比例。默认情况下,这三个属性的值都是1,表示节点不被缩放。如果设置Scale属性,则ScaleX和ScaleY都会随之变为相同的值。当然,我们也可以给ScaleX与ScaleY设置不同的值,那样Scale属性的值就没有意义了。
(6)bool Visible:获取或设置节点的可见性。当Visible为true时,节点会被显示,反之节点不会被显示。在节点不被显示的时候,也不会被调用绘图方法(visit与draw)。这是它的访问器方法: bool isVisible(); void setVisible(bool visible);
(7)float SkewX与float SkewY:获取或设置斜切角度。节点以锚点为中心,平行x轴或y轴方向作一定角度的变形。SkewX为平行x轴顺时针的变形,SkewY为平行y轴逆时针的变形,单位为角度。SkewX与SkewY的默认值为0,表示节点没有斜切变形。
(8)int Tag:获取或设置节点的标号。在Cocos2d-x中,Tag的作用类似于标识符,以便快速地从节点的所有子节点中找出所需节点。Tag可以用于定位子节点,因此添加到同一节点的所有CCNode之中,不能有两个节点的Tag相同,否则就给定位带来了麻烦。与Tag相关的方法有getChildByTag、removeChildByTag等。
(9)void* UserData:获取或设置与节点相关的额外信息。UserData为void*类型,我们可以利用这个属性来保存任何数据。
(10)Node的其他属性。
4.节点的组织
组织节点的基本方式:addChild方法。在介绍addChild方法时,我们是以向场景中添加层作为例子讲解的。而事实上,addChild是Node提供的方法,我们可以把任何的Node添加到另一个节点之中。除了添加节点之外,Node还提供了一系列管理节点的方法。
节点与坐标系——Cocos2d-x学习历程(十)的更多相关文章
- 场景切换特效Transition——Cocos2d-x学习历程(十二)
Transition 场景切换 在游戏中通常会用到一些场景的切换,比如从加载界面切换到欢迎界面.游戏中的所有场景存放在一个栈中,有且只有一个场景可以处于激活状态.直接replaceScene(即不适用 ...
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
- 大三仍是Linux系统小白的我给大家讲讲学习历程
我与Linux结缘是在大三的时候.我与Linux熟识是在偶然遇到<Linux就该这么学>的时候.因为我是电子信息工程专业,在高年级时开设了嵌入式课程,嵌入式系统是一种专用的计算机系统,作为 ...
- 来自一个电子狂的stm32学习历程
文章尾部有学习时的一些视频资料在学的可以看看那么我们就进入今天的主题我stm32的学习历程 在学习了51单片机之后,早已经对单片机这个东西甚有了解了,所有不管是从内部资源,还是一些常见应用,都可以说的 ...
- JS高级学习历程-6
PHP菜鸟学习历程-6 [闭包案例] 1 闭包创建数组 <!DOCTYPE html> <html lang="en"> <head> < ...
- Netty 学习(十):ChannelPipeline源码说明
Netty 学习(十):ChannelPipeline源码说明 作者: Grey 原文地址: 博客园:Netty 学习(十):ChannelPipeline源码说明 CSDN:Netty 学习(十): ...
- 十一、Android学习第十天——项目开始(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 十一.Android学习第十天——项目开始 Android知识点的学习告一 ...
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...
- Python 学习 第十篇 CMDB用户权限管理
Python 学习 第十篇 CMDB用户权限管理 2016-10-10 16:29:17 标签: python 版权声明:原创作品,谢绝转载!否则将追究法律责任. 不管是什么系统,用户权限都是至关重要 ...
随机推荐
- C#—Dev XtraTabControl动态增加Tab和关闭选项卡方法
C#—Dev XtraTabControl动态增加Tab和关闭选项卡方法,有需要的朋友可以参考下. 记录一下以免以后忘了 添加using DevExpress.XtraTab; 双击listview增 ...
- cql
创建keyspace :CREATE KEYSPACE keyspace1 WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': ...
- JavaScript 中 关于 this 的学习笔记
今天上午主要学习了js中的 this ,因为之前学习面向对象时,this这个东西出现的还是很频繁的,理解的很不透彻,感觉老被JAVA的思想带进坑里,所以对它特别关注. 首先贴一个大神的一篇博客,我是通 ...
- 总结一下.net framework适合装在哪些系统中
最近在客户这部署,环境是windows server2003 service pack2.因为vs2012开发环境是.net framework4.5,所以发布iis的时候,尝试在sever2003上 ...
- 在Activity中动态设置TextView的隐藏属性
if (true) { //显示 viewHolder.tvLine.setVisibility(View.INVISIBLE);} else { //不显示 viewHolder.tvLine.se ...
- 解决IP地址被占用问题
问题背景: 在公司一直有同事在抱怨IP地址总是被占用的问题,我决定用技术解决这个问题 解决方案: 1 最开始想在防火墙里面做IP和mac地址绑定,做了几个之后,还是有同事在说IP被占用,后来 分析了一 ...
- 一个简单的shell脚本
一个简单的shell脚本 一个简单的shell脚本 编写 假设我想知道目前系统上有多少人登录,使用who命令可以告诉你现在系统有谁登录: 1.[KANO@kelvin ~]$ who2.KANO tt ...
- linux查看网卡吞吐量和网卡流量用自带命令,iptraf查看。
1 命令行直接输入:iptraf(如果没有,使用yum install iptraf安装) 2.打开进入选择ip镜像. 3. 选择监听测试的接口,所有接口. 4.开启监听状态日志,系统默认日志路径./ ...
- jQuery事件对象的属性
注:摘自<锋利的jQuery(第二版)> JQuery在遵循W3C规范的情况下,对事件对象的常用属性进行了封装,使得事件处理在各大浏览器下都可以正常运行而不需要进行浏览器类型判断. 1. ...
- 自制DTU
最近打算自己做一款工业级DTU产品,预计到今年年底前完成,博客会随时更新产品进度,有兴趣的朋友可以联系我.