Запустите метод после init в cocos2d - PullRequest
1 голос
/ 30 июля 2010

У меня есть экран загрузки, который я инициализирую меткой для отображения последовательности загрузки. Я хочу вызвать мой DataManager ПОСЛЕ инициализации экрана загрузки, а затем вызвать метод для переключения сцен. Вот мой код:

-(id) init {
  if((self=[super init]))
  {
    loadingLabel = ....
    [self addChild:loadingLabel];

    /***** This is what I want to call after the init method
    //DataManager loads everything needed for the level, and has a reference to the 
    //loading screen so it can update the label
    [[DataManager sharedDataManager] loadLevel:@"level1" screen:self];
    //this will switch the scene
    [self finishLoading];
    *****/
  }
  return self;
}
-(void) setLoadingPercentage:(int) perc {
   //changes the label
}
-(void) finishLoading {
    [[CCDirector sharedDirector] replaceScene:[Game node]];
}

Поэтому я не могу вызвать менеджер данных в init, потому что метка не будет обновляться при загрузке контента, и я не могу переключать сцены в методе init. Итак, как мне запустить мой datamanger и завершить загрузку ПОСЛЕ инициализации? Мой план состоял в том, чтобы установить расписание с интервалом в 1 секунду, что делает это, но кажется неправильным ждать секунду.

РЕДАКТИРОВАТЬ: еще один способ, которым я мог бы сделать это, это планировать на каждом кадре и спрашивать диспетчер данных, где он в ... Это уже лучше, так как диспетчеру данных не нужна ссылка на экран загрузки.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 30 июля 2010

Вы можете использовать performSelector:withObject:afterDelay: для принудительного выполнения указанного селектора во время следующей итерации цикла выполнения текущих потоков:

[self performSelector:@selector(finishLoading) withObject:nil afterDelay:0.0f];
0 голосов
/ 04 августа 2010

Ответ выше верен, но вы должны использовать способ Cocos2d, чтобы запланировать запуск методов позже:

[self schedule:@selector(finishLoading) interval:0.1];

-(void)finishLoading
{
  [self unschedule:@selector(finishLoading)];
  //Do your stuff
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...