2013-03-14 3 views
0

С UIKit ViewController я делаю это, чтобы начать игру: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

+0

ok, я добавил другое предложение, см. Обновление – LearnCocos2D

+0

Если я не позвоню [конец директора], во второй раз, когда я начинаю игру, я просто получаю розовый экран. Вслед за бесконечным потоком ошибок openGL: ошибка OpenGL 0x0501 in - [CCSprite draw] 532 – soleil

0

Предполагая, что вы делаете то, что делаете, чтобы предотвратить обновление режиссера с 4 кадрами в секунду при работе в фоновом режиме, вы должны попытаться снова запустить режиссера.

Это, как говорится, в вашем 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

0

Когда вы «Приостановить» свою игру, используя этот код:

[[CCDirector sharedDirector]pause]; 

Вы также должны «резюме» вашего директора в перезапуске или код кода перед нажатием любой сцены:

[[CCDirector sharedDirector]resume]; 

 Смежные вопросы

  • Нет связанных вопросов^_^