Cocos2d CCAction已经运行应用程序终止

时间:2012-07-09 01:20:30

标签: animation cocos2d-iphone ccaction

我正试图为我的玩家设置行走方向的动画(就像在鸟瞰RPG中一样)所以我拥有它if (joystick.velocity. y > 0){ [player runAction: walkUpAction] }当然这会导致问题Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'runAction: Action already running我明白了。我没有得到的是一种解决这个问题的方法。我已经尝试添加一些变量(isRunning,如果正在运行,那么不要调用类型的东西),但似乎没有任何工作。我在cocos2d论坛上问过这个问题,但没有运气。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

试试这个:

首先在.h

中声明一些iVars
BOOL _isWalkingUp;
BOOL _isWalkingDown;
BOOL _isWalkingLeft;
BOOL _isWalkingRight;

然后,在您检测方向更改的每个代码部分中:

if(!_isWalkingUp && ( joystick.velocity.y >0 ) ) {
    [player stopAllActions];
    [player runAction:walkUpAction];
    _isWalkingUp=YES;
    _isWalkingDown=NO;
    _isWalkingLeft=NO;
    _isWalkingRight=NO;
}
等等......你可能想要添加一些“状态”以避免生涩的运动控制。但这将是一种开始。

答案 1 :(得分:1)

在cocos2d中,您必须在运行前重新创建操作,即您不能多次运行相同的操作。因此,如果您不想仅停止此操作而不是其他操作,则无需将操作保存在变量中。这是关于你的错误。如果你告诉我们更多细节,你想用walkUpAction做什么,我可以尝试给你一些关于如何做你想做的事情的建议。

实际上,我不知道这个操纵杆是如何工作的,但是如果它没有存储以前的状态,你可以手动存储它并在前一个速度为0且当前速度大于0的情况下运行你的动作。并且,无论如何,你必须在再次运行之前重新创建动作。所以,你会有这样的东西

- (void) update:(ccTime)dt
{
    BOOL needRunWalkUpAnimation = (prevVelocity == 0) && (curVelocity > 0);
    if( needRunWalkUpAnimation )
    {
        id walkUpAction = \\create your action here
        [player runAction: walkUpAction];
    }

    prevVelocity = curVelocity;
}