ProgressTo + CCMenuItemSprite实现简单的“技能冷却”效果
http://www.cocoachina.com/bbs/simple/?t69462.html
最近在游戏的制作中想要加入一个类似技能使用后的“冷却效果”,第一个想到的就是cocos2d中的ProgressTo。
于是看了一下自带的sample,感觉不错,于是就实践了一下,但是发现了如下的问题:
1.ProgressTo无法和CCSprite一同使用,必须使用在ProgressTimer对象上
2.ProgressTimer无法和CCMenuItemSprite一起使用
当Sprite数量很少时,可以单个使用ProgressTo + ProgressTimer,但是当Sprite很多并使用CCMenu的时候,这就很不方便了。
当然也有相对简单的解决方法,就是遍历CCMenu所有child,在每一个菜单项上附上一层“ProgressTo”,运行完冷却效果以后再将其移出即可。
下面是简单的实现过程:
1.新建一个cocos2d工程,将自动生成的“Hello World”代码删除
2.增加3个CCSprite,每一个有三种状态,正常,选中,禁用
3.将刚才创建的CCSprite加入CCMenuItemSprite菜单项
4.使用上面的菜单项创建菜单
5.新建一个标签,当点击时开始执行“冷却”的效果
6.首先获取CCMenu对象
7.对其子菜单项进行遍历
8.对每一个菜单项,首先将其禁用
9.对每一个菜单项,在其上方穿件一个“完全一样的”ProgressTimer对象
10.有了ProgressTimer对象就可以让它来执行“冷却效果”了,执行完后还需要一些后续处理,所以使用CCCallFuncN
11.在processOver中,移除“冷却完”的ProgressTimer并根据tag值将对应菜单项启用
12.编译运行,可以看到不错的效果:




虽然效果是实现了,但是还是有一些小小的疑问:
1.processOver中通过遍历子菜单项比较tag值来确定应该删除的对象,有没有更简单的方法?
2.还有没有别的方法可以简单的实现“冷却”的效果呢?
下载地址:http://u.115.com/file/clgqzcxo
原文链接(有更详细的说明,有兴趣的可以看一下):
http://www.supersuraccoon-cocos2d.com/2011/08/05/

浙公网安备 33010602011771号