通过编写呼吸灯的需求,联想总结Cocos2d-x(2.1.5版本)的动作类CCAction
在谈游戏动作类之前,先谈谈游戏引擎,很久以前没有现在这些这么好用的游戏引擎,那时候的游戏开发者,每次开发一款游戏,都需要从底层用C++开始写,这必然费时费力,而且C++也不是那么好学的.因为这个迫切的需求,所以后面就有了游戏引擎来避免每次"重新发明轮子",让开发者集中主要的精力用于业务逻辑开发,好用的脚本的语言,如lua,js,自然必不可少.游戏引擎负责和CPU,GPU交互,那谁来和游戏引擎交互,lua虚拟机或者javaScript虚拟机.
通俗的讲,就是我们在做业务逻辑开发的过程中,调用lua虚拟机提供的接口,间接调用引擎的API,实现我们想要的效果.
回归正题,首先看看策划给我提的呼吸灯需求
那我实现的效果是怎么样的呢
通过视频我们可以看到那个加号的表现是淡进淡出,原理就是在改变透明度和颜色
那代码是如何实现的呢
首先声明一个动态数组arr,然后加入两个动作元素,一个是淡出,一个是淡入,声明一个重复执行的CCRepeatForever方法,用runAction来执行,就可以制作出呼吸灯的效果了
我刚开始是用CCFadeOut和CCFadeIn来弄的,但是没有成功,自己百度是找不到dbUIFadeOut和dbUIFadeIn的,因为这两个是当前游戏的lua虚拟机封装的接口,CCFadeOut和CCFadeIn是引擎提供的API,这两者不一定是完全统一,具体的项目要具体看.
对于CCArray有几点要注意:
a.我们创建一个CCArray后如果不是立刻使用的话一定要调用retain,增加引用计数,不然会被自动释放!
这里就涉及到了C++中Cocos2d-x内存管理技术,我们买手机的时候,肯定会发现4g,6g,8g内存的手机价位是不一样的,所以的手机的内存是很珍贵的,作为开发者,我们要谨慎利用内存,并且去避免内存泄漏.
Cocos2d-x有两种管理内存的技术:
一种是引用计数,通过给每个对象维护一个引用计数器,调用一次对对象,就加1,失去一次就减1,当引用计数为0时,自动触发对象的回收释放.
另一种是autorelease,就是把对象加入自动回收池(CCAutore-leasePool),每一帧结束释放一次回收池,每帧开始前创建一个新的回收池.
b.删除CCArray中的元素时内部调用一次release,不然可能会内存泄露!
那我们继续总结一下游戏中使用的那些动作(Action)
1.CCFlace:将节点放置到某个指定位置,相当于setPosition()
2.CCFlipX和CCFlipY:把精灵沿X轴或者Y轴反向显示,与设置精灵的FlipX和FlipY属性相同
3.CCShow和CCHide:用于显示和隐藏节点,与设置节点的Visible属性一样
4.CCCallFunc系列:回调
CCCallFunc创建一个回调动作(调用不带参数的回调方法)
CCCallFuncN创建一个回调动作(调用 带一个参数的回调方法)
CCCallFuncND创建一个回调动作(调用 带两个参数的回调方法)
5.CCMoveTo和CCMoveBy:节点直线运动
6.CCJumpTo和CCJumpBy:使节点以一定轨迹跳跃到指定位置
7.CCBezierTo和CCBezierBy:使做曲线运动
8.CCScaleTo和CCScaleBy:产生所发效果,使节点缩放系数随时间线性变化
9.CCRotateTo和CCRotateBy:产生旋转效果,正方向为顺时针
10.CCFadeIn和CCFadeOut:产生淡入淡出的效果
11.CCFadeTo:设置一段时间内透明度的变化效果
12.CCTintTo和CCTintBy:设置色调变化
13.CCBlink:使目标节点闪烁
14.CCAnimation:播放帧动画
15.CCRepeat/CCRepeatForever:重复
16.CCSpawn:并列,动作同时执行
17.CCSequence:序列,一系列动作按顺序执行
18.CCDelayTime:延时
19.CCSpeed:线性改变某个动作的速度,可以实现成倍地快放和慢放功能
20.CCActionEase:按比列改变目标动作的速度,可以实现由快到慢,速度随时间改变的变速运动