标签:
本将主要介绍下CCNode这个类。CCNode是全部节点的基类,当中包含我们经常使用的CCScene(场景)、CCLayer(图层)、CCSprite(精灵)等。它是一个不可以可视化显示的抽象类,仅仅是用来定义全部节点的公共属性和方法的。本讲纯粹是理论。
首先来看看CCNode的继承结构图,仅仅列举了经常使用的类
1.创建一个新的节点
2.加入子节点
5.又一次设置子节点的z值
6.停止节点执行的全部动作和消息调度
1.加入节点时设置的z值,决定了节点的绘制顺序
子节点会继承父节点的这个属性
既然是旋转,肯定是绕着一个点进行旋转。到底是绕着哪个点旋转。取决于anchorPoint
既然是缩放,肯定是绕着一个点进行缩放,到底是绕着哪个点缩放,取决于anchorPoint
子节点会继承父节点的这个属性
5.节点Y方向(即高度)的缩放比例。
子节点会继承父节点的这个属性
6.节点的大小(不受scale和rotation影响)
7.节点在父节点中的位置(以父节点左下角为(0, 0))
cocos2d的坐标系:(0,0)在屏幕的左下角。x值向右正向延伸,y值向上正向延伸.
winSize代表屏幕的尺寸
认真思考一下,不难发现,事实上position的含义还是非常模糊的。
如果一个节点的大小是20x20。则包括了400个点,那么在400个点中到底是哪个点在position属性指定的位置上呢?
这个就取决于anchorPoint和isRelativeAnchorPoint属性,假设isRelativeAnchorPoint为NO,节点的左下角会在position属性指定的位置上;假设isRelativeAnchorPoint为YES。position的含义还会受anchorPoint的影响
8.能够称之为"定位点",这个anchorPoint影响的东西非常多,比方节点position的含义、节点绕着哪个点进行缩放或旋转。anchorPoint的x、y取值范围都是0到1
默认情况下,CCSprite、CClayer、CCScene的anchorPoint都为(0.5, 0.5),即默认情况下它们的定位点都是自己的中心点。
以下我分别具体描写叙述下anchorPoint对position、缩放、旋转的影响
1> anchorPoint对position的影响
anchorPoint要对position造成影响,前提条件是isRelativeAnchorPoint为YES
我先做个总结:
* 假设anchorPoint = (0, 0),那么节点的左下角就会在position属性指定的位置上
* 假设anchorPoint = (0.5, 0.5),那么节点的中心点就会在position属性指定的位置上
* 假设anchorPoint = (1, 1),那么节点的右上角就会在position属性指定的位置上
* anchorPoint为其它值,以此类推
以下绘图解释一下
如果蓝色的大小是100x100,红色的大小是50x50
由于anchorPoint的不同,改变了红色在蓝色中的位置
2> anchorPoint对缩放的影响
我先做个总结:
* 假设anchorPoint = (0, 0),那么节点就会绕着自己的左下角进行缩放
* 假设anchorPoint = (0.5, 0.5),那么节点就会绕着自己的中点进行缩放
* 假设anchorPoint = (1, 1),那么节点就会绕着自己的右上角进行缩放
* anchorPoint为其它值,以此类推
3> anchorPoint对旋转的影响
我先做个总结:
* 假设anchorPoint = (0, 0),那么节点就会绕着自己的左下角进行旋转
* 假设anchorPoint = (0.5, 0.5)。那么节点就会绕着自己的中点进行旋转
* 假设anchorPoint = (1, 1),那么节点就会绕着自己的右上角进行旋转
* anchorPoint为其它值。以此类推
以下绘图解释一下
蓝色代表旋转前,红色代表旋转后
* 默认情况下,CCSprite的isRelativeAnchorPoint为YES,CCScene、CCLayer的isRelativeAnchorPoint为NO
10.父节点
动作是指在特定时间内完毕移动、缩放、旋转等操作的行为。
CCNode能够执行动作实现一些动画效果。
1.运行动作
当动作运行完成后,会自己主动从节点上删除
2.停止动作
停止节点上的全部动作
节点能够进行消息调度,也就是指系统会每隔一段时间调用一次节点的某个方法。节点的消息调度是非经常常使用的,比方一个子弹射出去了。我们须要隔一段时间就调用子弹的某个方法来改变的子弹的位置
为了说明消息调度的使用方法。我定义一个子弹类。由于子弹是看得见的。所以应该继承CCSprite,而不是继承CCNode
1.最简单的做法是直接调用节点的scheduleUpdate方法,就能够開始消息调度
2.设置消息调度的优先级
以下举个样例:
3.假设想在消息调度时调用另外一个方法。或者不想以每帧的频率调用该方法,应该採取以下这样的做法
4.取消消息调度
取消调用update:方法
标签:
原文地址:http://www.cnblogs.com/yxwkf/p/4807043.html