1.渲染
在cocos2d中渲染的根节点是CCScene(PS:CCScene也是CCNode的子类),但是在drawScene()中似乎没有类似draw()的方法,那是因为在渲染之前,要对游戏中的节点做一些处理,包括旋转,缩放等等,所以这个方法的名字叫visit(),而visit()是定义在CCNode中的虚方法,CCScene中并没有单独实现。
(PS:在每一次渲染的时候,都需要先将之前的矩阵入栈,在渲染完当前节点之后,矩阵出栈,恢复之前的矩阵)
(1)矩阵变化
通过CCNode::transform()对当前节点做矩阵处理(包括旋转,缩放等等)
(2)绘制
绘制就很简单了,遍历所有的子节点,采用递归的方式,对每一个CCNode调用visit()方法
(PS:设置Z-Order的时候可以设置为负值,有时候是很必要的,比如我们以一个人物精灵的身体为位置参照物,绘制在Z-Order为0的位置上,如果要给这个人物精灵添加一个披风耍帅,就可以将披风的Z-Order设置为负值,并且可以继续以精灵身体作为参照物,因为cocos2d-x提供的访问顺序也是 Z-Order为负值的子节点->自身节点->Z-Order为正值的子节点)
2.位置
对于不绘制的父节点,那么子节点标签将相对视图(视图相对于父节点)的左下角放置。对于绘制的父节点,子节点标签将会以父节点纹理的左下角为原点(左下角为中心)显示
定位点
每个节点都有一个定位点 anchorPoint,它定义的是贴图相对于节点位置(position)的向左向下的偏移,通过把贴图的宽和高乘以定位点来得到贴图的偏移值。但是只有当此节点拥有贴图时,这个定位点才有用。
默认anchorPoint属性设置为(0.5,0.5)或者贴图尺寸的一半。它是 一个抽象的因素,一个乘数,而不是一个特定的像素尺寸。如果设置anchorPoint为(0,0)的,实际上是把贴图的左下角同节点的位置对齐了。但不要在cocos2d里面这样做。这样做会引起很多麻烦,包括旋转和缩放,父节点和子节点之间的相对位置,还有距离测试和碰撞测试。要保证anchorPoint在贴图的中央。
如果anchorPoint的点的值为负值则图片在position的右上,正值时图片在position的左下。当anchorPoint保存默认值(0.5,0.5)时,position就是图片的中心点了。
position:节点的左下点,原点。
定位点anchorPoint默认值是两个0.5,可理解为本来精灵和其图片重合,但故意默认为两个0.5,使精灵向右上移动了一半的位置。
精灵的position是精灵的左下角,同时是其中的图片的中心点,这有个好处是精灵基于这个点旋转或缩放时,我们看到图片的中心点没有移动。旋转在物理世界中常见,基于位置的碰撞检测可能也已经适应了0.5。
可能只需要在操作sprite时需要有时特殊调整定位点。
如果没有设置position,position默认值是(0,0)
在cocos2d中渲染的根节点是CCScene(PS:CCScene也是CCNode的子类),但是在drawScene()中似乎没有类似draw()的方法,那是因为在渲染之前,要对游戏中的节点做一些处理,包括旋转,缩放等等,所以这个方法的名字叫visit(),而visit()是定义在CCNode中的虚方法,CCScene中并没有单独实现。
(PS:在每一次渲染的时候,都需要先将之前的矩阵入栈,在渲染完当前节点之后,矩阵出栈,恢复之前的矩阵)
(1)矩阵变化
通过CCNode::transform()对当前节点做矩阵处理(包括旋转,缩放等等)
(2)绘制
绘制就很简单了,遍历所有的子节点,采用递归的方式,对每一个CCNode调用visit()方法
(PS:设置Z-Order的时候可以设置为负值,有时候是很必要的,比如我们以一个人物精灵的身体为位置参照物,绘制在Z-Order为0的位置上,如果要给这个人物精灵添加一个披风耍帅,就可以将披风的Z-Order设置为负值,并且可以继续以精灵身体作为参照物,因为cocos2d-x提供的访问顺序也是 Z-Order为负值的子节点->自身节点->Z-Order为正值的子节点)
2.位置
对于不绘制的父节点,那么子节点标签将相对视图(视图相对于父节点)的左下角放置。对于绘制的父节点,子节点标签将会以父节点纹理的左下角为原点(左下角为中心)显示
定位点
每个节点都有一个定位点 anchorPoint,它定义的是贴图相对于节点位置(position)的向左向下的偏移,通过把贴图的宽和高乘以定位点来得到贴图的偏移值。但是只有当此节点拥有贴图时,这个定位点才有用。
默认anchorPoint属性设置为(0.5,0.5)或者贴图尺寸的一半。它是 一个抽象的因素,一个乘数,而不是一个特定的像素尺寸。如果设置anchorPoint为(0,0)的,实际上是把贴图的左下角同节点的位置对齐了。但不要在cocos2d里面这样做。这样做会引起很多麻烦,包括旋转和缩放,父节点和子节点之间的相对位置,还有距离测试和碰撞测试。要保证anchorPoint在贴图的中央。
如果anchorPoint的点的值为负值则图片在position的右上,正值时图片在position的左下。当anchorPoint保存默认值(0.5,0.5)时,position就是图片的中心点了。
position:节点的左下点,原点。
定位点anchorPoint默认值是两个0.5,可理解为本来精灵和其图片重合,但故意默认为两个0.5,使精灵向右上移动了一半的位置。
精灵的position是精灵的左下角,同时是其中的图片的中心点,这有个好处是精灵基于这个点旋转或缩放时,我们看到图片的中心点没有移动。旋转在物理世界中常见,基于位置的碰撞检测可能也已经适应了0.5。
可能只需要在操作sprite时需要有时特殊调整定位点。
如果没有设置position,position默认值是(0,0)