0

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

4

2 回答 2

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;
}
于 2012-07-09T10:29:24.287 回答
1

尝试这个:

首先在 .h 中声明一些 iVar

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;
}

等等....您可能会想要添加一些“状态”以避免运动控制不平稳。但这将是一个开始。

于 2012-07-09T02:27:28.640 回答