2013-02-20 81 views
0

我正在爲我的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

你的更新方法如何編寫以提供你的動作/動畫?有一件事你可以做的是,而不是使用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的文檔中概括爲「暫停運行現場。正在運行的場景將是drawed但所有計劃的計時器將被暫停而暫停,平局率將4 FPS降低CPU消費」

的isPaused得到我採用的是一個布爾其中在開始的時候我的更新方法我行

if (isPaused) { return; } 

但回頭看,現在你不應該需要,在所有。由於我的performSelector中的計時器是在導演暫停後添加的,它將按計劃運行。這應該使您能夠獲得所需的添加所需內容的結果。