Fork me on GitHub

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/

 

 

posted on 2012-05-03 10:01  pengyingh  阅读(507)  评论(0)    收藏  举报

导航