循环中的cocos2d runAction

时间:2012-05-07 19:01:00

标签: objective-c cocos2d-iphone

cocos2d很新,所以这可能是一个学校男孩的问题。

我有ccMenu的ccMenuItemImage,并希望按顺序为每个菜单项设置动画以淡出。

我有一个包含所有CCMenuItemImages的数组:

menuItems = [[NSArray alloc] initWithObjects:button1, button2, button3, nil];

我试图遍历数组并淡出每个按钮:

CCFadeOut *fadeToAlpha = [CCFadeOut actionWithDuration:0.5];

for (CCMenuItemImage *nextOne in menuItems)
    [nextOne runAction:fadeToAlpha];

这似乎有效,但只会淡出数组中的最后一个CCMenuItemImage。我知道我可以在实际的CCMenu上执行动作,但我想在每个菜单项上一个接一个地执行动画。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您必须使用CCSequence进行工作....

而不是使用循环使用像这样的CCSequence ..

[button1 runAction:[CCSequence actions:fadeToAlpha,use CCCallFuncN to call 2nd method, nil]];

第二种方法

[button2 runAction:[CCSequence actions:fadeToAlpha,use CCCallFuncN to call 3nd method, nil]];

还有另外一种方法......这很棘手......  你的淡入淡出时间是0.5。

float duration = 0;
for (CCMenuItemImage *nextOne in menuItems)
{
    [nextOne runAction:[CCSequence actions:[CCDelayTime actionWithDuraion:duration],fadeToAlpha,nil]];

  value = value + 0.5;

}

检查语法..这样你就可以一个接一个地动画按钮......希望这会有所帮助.. :)

答案 1 :(得分:0)

尝试:

int index=0;
for (CCMenuItemImage *nextOne in menuItems){
   CCFadeOut *fadeToAlpha = [CCFadeOut actionWithDuration:0.5]; 
   id fader = [CCSequence actions:[CCDelayTime actionWithDuration:index*.5],
                                  fadeToAlpha,nil];
   [nextOne runAction:fader];
   index++;
}

另外,避免对多个runActions使用相同的动作对象实例,为每个使用实例创建新动作。