我正在为我的cocos2d(-iphone v2.0)平台游戏/正在运行的游戏实现教程模式 - 当用户处于教程模式时,我需要暂停游戏并提供说明。在游戏中,有一点我需要停止所有动画并按顺序向用户提供一些输入,相互覆盖(相隔1秒钟)。
在我要求的点上,在我的游戏图层中,我调用[[CCDirector sharedDirector]stopAnimation]
来停止所有动画。现在,我想调用两个连续的呼叫,间隔1秒。因为动画停止,我没有得到任何更新调用。所以,我尝试使用NSTimer,如下所示:
-(void)update
{
//...
[[CCDirector sharedDirector]stopAnimation];
//...
[self showFirstTutorialInstruction];
NSTimer *timer = [[NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(showNextTutorialInstruction)
userInfo:nil
repeats:NO]retain];
//...
}
-(void)ccTouchBegan(...)
{
//...
[CCDirector sharedDirector]startAnimation];
//...
}
现在动画停止,定时器函数被调用,但是在我重新开始动画之后,选择器中的第二条指令才会显示在显示区域中。如何在showNextTutorialInstruction
中获取第二条指令,以便在调用后立即显示?我试图强制访问图层,但不起作用。
答案 0 :(得分:0)
如何编写更新方法来提供动作/动画?你可以做的一件事是使用stopAnimation而不是stopAnimation。例如,我在测试项目中尝试了这个
-(void)startPause {
if(!isPaused) {
isPaused = YES;
[[CCDirector sharedDirector] pause];
[self performSelector:@selector(addLabel) withObject:nil afterDelay:2.0];
} else {
isPaused = NO;
[self removeChild:addLabel cleanup:YES];
[[CCDirector sharedDirector] resume];
}
}
-(void)addLabel {
addLabel = [CCLabelTTF labelWithString:@"TEST" fontName:@"Arial" fontSize:20];
[self addChild:addLabel];
CGSize winSize = [[CCDirector sharedDirector] winSize];
addLabel.position = ccp(winSize.width/2, winSize.height/2);
}
[[CCDirector sharedDirector] pause];在cocos2d文档中概述为“暂停正在运行的场景。正在运行的场景将绘制但所有预定的计时器将暂停,暂停时,绘制速率将为4 FPS以减少CPU消耗”
我使用的isPaused是一个BOOL,在我的更新方法中,一开始我有一行
if (isPaused) { return; }
但回头看它现在根本不需要它。由于我的performSelector中的计时器在导演暂停后添加,它将按计划运行。这样可以让您获得所需的添加所需内容的结果。