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