想象一下具有自上而下视图的游戏。从一开始,屏幕上就有10个怪物。每一个都由CCSprite
表示,并且应用了连续的CCAnimation
。
如果我只是使用runAction:[CCAnimate ...]
一次对所有怪物运行动画,它们都会同步动画。我想得到的结果是在0和它的持续时间之间的随机点开始每个动画。一旦动画到达其端点,它应该从头开始并像往常一样继续循环。
在没有修改cocos2d源代码的情况下,我还没有找到实现此结果的方法。而且,我无法为CCRepeatForever
和CCSequence
获得适当的结果(当我想要循环两个或更多连续动画时。后一种情况的代码:
CCAnimate *idleAction = [CCAnimate actionWithAnimation:...];
CCAnimate *moveAction = [CCAnimate actionWithAnimation:...];
// ...
- (void)playIdleAnimation
{
[mySprite runAction:
[CCSequence actions:idleAction,
[CCCallFunc actionWithTarget:self selector:@selector(playMoveAnimation)],
nil]];
}
- (void)playMoveAnimation
{
[mySprite runAction:
[CCSequence actions:moveAction,
[CCCallFunc actionWithTarget:self selector:@selector(playIdleAnimation)]
nil]];
}
请注意,我不能使用[CCSequence actions:idleAction, moveAction, nil]
,因为在切换到另一个动作之前,这两个动作中的每个动作都可以重复任意次数。
我将很感激有关这个问题的任何想法。谢谢。
答案 0 :(得分:0)
如何在动作之间添加随机延迟......如下:
[self runAction:[CCSequence actions:[CCDelayTime actionWithDuration:arc4random()%5 + 3],idleAction,moveAction,nil]];
答案 1 :(得分:0)
int randomNumber = arc4random()%5;
CGRect frame1 = CGRectMake(0,0,50,50);
CGRect frame2 = CGRectMake(50,0,50,50);
CGRect frame3 = CGRectMake(100,0,50,50);
CGRect frame4 = CGRectMake(150,0,50,50);
CGRect frame5 = CGRectMake(200,0,50,50);
switch (randomNumber) {
case 0:
// add frames 1,2,3,4,5 to cache
break;
case 1:
// add frames 2,3,4,5,1 to cache
break;
case 2:
// add frames 3,4,5,1,2 to cache
break;
// etc etc
}
// run animation forever
我认为这样做可能会回答你的问题。
答案 2 :(得分:0)
我实际上已经实现了你需要的东西。这是拉取请求: - https://github.com/cocos2d/cocos2d-iphone/pull/249
通过我的更改,您可以在动画的任何位置以确定性和随机方式启动基于SpriteFrame的动画。
我不确定他们最终是否最终合并。