我正在使用Cocos2d为iPhone编写游戏。 这是问题所在。
我在其上运行CCSprite和CCAction。
CCSprite texture;
CCAction anim_action;
“Anim_action”是CCRepeatForever操作。 现在我想检查这个动画是否正在运行。
首先我虽然可以使用[isDone]功能,但我认为它不能用于CCRepatForever动作(我不确定 - 这个opion是基于我的测试)
那么如何检查这个动画是否已经在我的“纹理”上运行了?
也许有一种方法可以获得目前在纹理上运行的动作名称? 它也可能有用!
答案 0 :(得分:2)
有一种方法可以检查特定操作是否在纹理上运行。使用:
CCAction *action = [texture getActionByTag:kAsignedActionTag];
其中 kAsignedActionTag 是分配给动画的标记。
anim_action.tag = kAsignedActionTag;
如果您的操作仍在运行, getActionByTag 方法将不会返回nil。
答案 1 :(得分:1)
我不相信有一种方法可以直接判断CCRepeatForever操作是否已经完成,因为isDone没有任何意义,但是有些技术可以用来提供回调以指示某些内容是否仍在运行:< / p>
答案 2 :(得分:1)
您可以在应用效果时轻松使用[isDone]
- (void)shakeThatThingOn: (BOOL)on { //you can return BOOL and get if the animation is working or not
if (on == YES){
id shaky2 = [CCShaky3D actionWithRange:3 shakeZ:NO grid:ccg(15,10) duration:5];
if (![shaky2 isDone])
[self runAction:[CCSequence actions:shaky2,[CCStopGrid action],nil]];
}
else {//this else is being called when you turn off animation (it's just 0.2s continuation after turning off - for better visual effect.
[self stopAllActions];
id shaky2 = [CCShaky3D actionWithRange:3 shakeZ:NO grid:ccg(15,10) duration:0.2];
[self runAction:[CCSequence actions:shaky2,[CCStopGrid action],nil]];
}}
并通过简单的BOOL控制它,如果它打开或关闭。 我不知道这是不是你的意思,但希望它无论如何都会有所帮助。
答案 3 :(得分:1)
如果您知道将在精灵上运行多少个动作,或者动画是唯一的动作,那么您可以通过检查精灵的正在运行的动作总数来推断动画正在运行。
if ([texture numberOfRunningActions] > 0) //animation is running
或
if ([texture numberOfRunningActions] > someNumber) //if you had other actions running