cocos2d-x 引擎原理

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) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值