2013-03-14 70 views
0

從UIKit的視圖控制器我這樣做是爲了開始遊戲:的cocos2d - 運行場景中的第二次不安排更新

if (director.runningScene == nil) 
    { 
     [director runWithScene:[MyGameLayer scene]]; 
    } 
    [director startAnimation]; 

MyGameLayer看起來是這樣的:

+(id) scene { 
    CCScene *scene = [CCScene node]; 
    MyGameLayer* layer = [MyGameLayer node]; 
    [scene addChild:layer z:0 tag:GameSceneLayerTagGame]; 


    return scene; 
} 

-(id) init { 
    if ((self=[super init])) 
    { 
     NSLog(@"init!"); 
     self.isTouchEnabled = YES; 

     [self initPhysics]; 

     [self scheduleUpdate]; 
    } 
    return self; 
} 

第一次我玩遊戲,一切正常。 -(void) update: (ccTime) dt被調用,因爲它應該。如果我退出比賽,這樣做:

CCDirectorIOS* director = (CCDirectorIOS*)[CCDirector sharedDirector]; 
    [director stopAnimation]; 
    [director end]; 

然後再次玩遊戲,-(void) update: (ccTime) dt不會被調用,儘管我知道-init()獲取調用。遊戲出現在屏幕上,但更新計劃第二次不起作用。什麼會導致Cocos2d不安排更新,我該如何解決?

回答

0

終於明白了這一點。當該具有的退出按鈕遊戲打開菜單,我暫停遊戲是這樣的:

[[self gameLayer] pause]; 

所以,當我將開始一個新的遊戲,cocos2d的仍然暫停,即使現場,層釋放我正在創建一個新的glView。

如果我用這個原理:

[[self gameLayer] pauseSchedulerAndActions]; 
0

您是否覆蓋(實施)onEnter*/onExit*方法之一?如果是這樣,請確保您調用超級實現,否則調度和觸摸輸入可能無法工作。

更新: 除此之外,不要試圖調用[導演結束],因爲它完全關閉了cocos2d,這已知是有問題的。

+0

不,我沒有這樣做。 – soleil 2013-03-14 00:55:47

+0

好吧,我又添加了一條建議,看更新 – LearnCocos2D 2013-03-14 08:05:34

+0

如果我不打電話給[導演結束],我第二次開始遊戲時我只得到一個粉紅色的屏幕。隨之而來的是openGL錯誤層出不窮:OpenGL錯誤0x0501 in - [CCSprite draw] 532 – soleil 2013-03-14 18:10:55

0

假設您正在做的是爲了防止導演在後臺工作時更新4fps,您應該嘗試再次啓動導演。

話雖這麼說,在你的applicationDidBecomeActive,添加以下代碼

[[CCDirector sharedDirector] stopAnimation]; // call this to make sure you don't start a second display link! 
[[CCDirector sharedDirector] resume]; 
[[CCDirector sharedDirector] startAnimation]; 

來自How to implement pause/resume in cocos2d game?

如果我不正確,請讓我知道你想與你辦主任稱

+0

我有一個視圖控制器,有多個迷你遊戲可供選擇。所以我需要能夠退出一場比賽並開始另一場比賽。問題是更新調度程序只適用於我玩的第一個遊戲。在同一遊戲或任何其他遊戲的後續遊戲中不會發生動畫。 – soleil 2013-03-14 05:04:19

0

當您使用此代碼的「暫停」遊戲:

[[CCDirector sharedDirector]pause]; 

你還必須「恢復」你的主管在重啓或在推動任何場景之前的菜單代碼塊:

[[CCDirector sharedDirector]resume];