1

如果我正在使用在 cocos2D 中不重复的操作,我该如何重新启动该操作?

我正在使用代码:

 CCAnimate* action = [CCAnimate actionWithAnimation:myAnimation];

 [mySprite runAction: action];

该动作一次运行良好,但是当一个事件被触发时,我希望只要它完成就能够再次运行该动作,所以我尝试在触发事件时使用它。

 if( [action isDone] ){

     [mySprite runAction: action];

 }

但这会导致崩溃。任何人都知道正确的方法是什么?

4

3 回答 3

2

尝试将操作保留在实例变量中。在头文件中声明了一个指针

CCAction* myAction;

然后当初始化图层或精灵时

myAction = [CCAnimate actionWithAnimation:myAnimation];

从什么时候开始,每当你想调用你的动作时

if( [action isDone] ){

 [mySprite runAction: myAction];

}

我认为您的应用程序崩溃的原因是因为您正在调用一个仅在初始化它的方法期间存在的操作。

在我的游戏中,我使用 CCSequences(所以我可以使用 CCCallFunc 来设置/声明动画中的变量),所有这些 CCSequences 都作为实例变量存储在我的 CCSprite 子类中。

我有一个永远重复的空闲动画。

例如,每当我想“跳跃”时,我都会打电话

[self stopAllActions];
[self runAction:jumpSeq];

我的 jumpSeq 是一个播放跳跃动画的 CCSequence,并且在完成后重新启动空闲动画的序列末尾有一个 CCCallFunc。

希望这可以帮助。

进一步阅读:http ://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:actions_special?s[]=cccallfunc

于 2010-08-12T08:39:46.780 回答
0

原来我只是没有保留动作,一旦完成,精灵肯定已经删除了它。所以现在我的代码是;

  CCAnimate* action = [CCAnimate actionWithAnimation:myAnimation];

  [mySprite runAction: action];

  [action retain];

然后当我想让它再次运行时;

 if( [action isDone] ){

      [mySprite runAction: myAction];

 }
于 2010-08-12T19:55:50.663 回答
0

我遇到了同样的问题,我在头文件中声明了 CCAction* myAction,但是当我从另一个方法调用它时,我遇到了崩溃,但就像 @Bongeh 在使用 [myAction retain] 时提到的那样,它运行良好

于 2011-12-08T01:02:39.410 回答