我在cocos2dx V3中有一个Sprite *类型的玩家,我想让它在不同的时间间隔上运行不同的动画,我找不到暂停然后恢复特定动画的方法(动作)。虽然我可以使用_player-> pauseSchedulerAndActions()同时暂停和恢复Sprite的所有动作。我在精灵上使用“CCRepeatForever
”动作,所以,我必须暂停一个以恢复其他动作。请帮忙按标记或任何其他方法暂停操作。
在此先感谢。
答案 0 :(得分:1)
<强>糟糕强>
我假设这是Objective-C,但是@Droppy告诉我它不是。
我没有意识到cocos2d-x
是不同的。但是,因为这是一个相当高级别的框架,我在答案中所做的背后的概念仍然有效。我现在就在这里保留答案。
答案
我已经有一段时间了,因为我已经完成了任何Cocos2D,但我可以给你一个想法。
而不是创建一个动作并永远重复它,你应该有一个像这样的方法......
- (void)twirlAround
{
// only create and perform the actions if variable set to YES
if (self.twirling) {
// this will do your action once.
CCAction *twirlAction = // create your twirl action (or whatever it is)
// this will run this function again
CCAction *repeatAction = [CCActionCallBlock actionWithBlock:^{
[self twirlAround];
}];
// put the action and method call in sequence.
CCActionSequence *sequence = [CCActionSequence actions:@[twirlAction, repeatAction]];
[self runAction:sequence];
}
}
只要twirling
属性设置为YES
,就会重复运行。
因此,在您的代码中的其他位置(可能是您当前正在添加重复操作的位置),您可以执行此操作...
self.twirling = YES;
[self twirlAround];
这将开始反复旋转。
要停止它,你可以做...
self.twirling = NO;
这将停止旋转。
替代方法
- (void)twirlAround
{
// this will do your action once.
CCAction *twirlAction = // create your twirl action (or whatever it is)
// this will run this function again
CCAction *repeatAction = [CCActionCallBlock actionWithBlock:^{
if (self.twirling) {
[self twirlAround];
}
}];
// put the action and method call in sequence.
CCActionSequence *sequence = [CCActionSequence actions:@[twirlAction, repeatAction]];
[self runAction:sequence];
}
答案 1 :(得分:1)
基于Fogmeister的建议,这是
的cocos2d-x版本void MySprite::jumpForever(){
if (!twirling) return;
auto jump = JumpBy::create(0.5, Vec2(0, 0), 100, 1);
auto endCallback = CallFuncN::create(CC_CALLBACK_1(MySprite::jumpForever,this));
auto seq = Sequence::create(jump, endCallback, nullptr);
runAction(seq);
}