Изображение Cocos2d CCProgressTimer не отображается.Зачем? - PullRequest
1 голос
/ 27 ноября 2011

Заранее извините за вопрос новичка, но через три дня мне нужна помощь. Кто-нибудь может мне помочь?

Я пытаюсь использовать CCProgressTimer для своего класса, где я пытаюсь предварительно загрузить изображения для игры в CCTextureCache. Я пытался создать самый простой код:

  • Создание NSArray с изображениями.
  • Добавить каждое изображение из этого массива и одновременно обновлять индикатор выполнения.

Но мой индикатор прогресса не обновляется, прежде чем станет 100%. Я добавил NSLog trace в -(void)setPercentage:(float) percentage, и это выглядит так:

NSLog(@"percentage %f", percentage);
if(percentage_ != percentage) {
percentage_ = clampf( percentage, 0, 100);
[self updateProgress];
}

И я вижу сообщения для добавления каждого изображения:

...
percentage 25
percentage 30
percentage 35
...

Но индикатор выполнения (изображение) обновляется только до 100. Я думал, [self updateProgress] должен обновлять изображение прогресса при каждом вызове setPercentage.

Где моя ошибка?

1 Ответ

0 голосов
/ 27 ноября 2011

Игровой цикл Cocos2D работает следующим образом:

  1. обновление
  2. ничья
  3. повторение от 1

Теперь вы оченьскорее всего загрузка текстур каким-то методом обновления.Это означает, что это выглядит примерно так:

  • загрузка текстуры 1
  • процент обновления
  • загрузка текстуры 2
  • процент обновления
  • загрузка текстуры 3
  • процент обновления
  • загрузка последней текстуры
  • процент обновления до 100%
  • таймер хода прорисовки

Это означает, что таймер выполнения не отображается до тех пор, пока не будут загружены все изображения.Это можно решить, загрузив текстуры в отдельном потоке или разрешив Cocos2D отображать каждое обновление, запланировав селектор с интервалом 0, что означает, что селектор будет запускаться каждый кадр:

-(id) init
{
  …
  [self scheduleUpdate:@selector(loadTexture) interval:0];
}

-(void) loadTexture
{
  if (no more textures)
  {
    [self unschedule:_cmd];
  }
  else
  {
    // load next texture
    // update progresstimer
  }
}

YouПридется добавить необходимые переменные в ваш экземпляр класса, в частности, таймер выполнения и индекс последней загруженной текстуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...