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