Цель C - метод, похоже, возвращает среднюю функцию без обратного вызова (проект iPhone / cocos2d) - PullRequest
0 голосов
/ 25 января 2011

Я написал метод, целью которого является загрузка следующего уровня в игре.Он находит индекс уровня, загружает его из загрузчика уровней (класс, который я написал), создает слой, содержащий этот уровень, а затем информирует сцену о переходе между новым и старым слоями уровня.В настоящее время спрайт игрока становится невидимым, поэтому во время перехода нет двух игроков.

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

Метод (как сейчас с входами в систему)чтобы следить за происходящим):

    if([owningScene mayChangeLayer])
 {
  NSLog(@"May change layer");
  levelFinished = YES;
  NSLog(@"Level marked as finished");
  [carver setVisible:NO];
  NSLog(@"Carver hidden");
  GameState *state = [GameState sharedGameState];
  NSLog(@"game state loaded");
  state.screenXOffset += xOffset;
  state.screenYOffset += yOffset;
  NSLog(@"offset: %d, %d", state.screenXOffset, state.screenYOffset);
  GameLevel *aLevel = [loader getLevelAtXOffset:state.screenXOffset
           atYOffset:state.screenYOffset];
  NSLog(@"loaded level %@", aLevel);

  GameLevelLayer *layer = [[GameLevelLayer alloc] initWithLevel:aLevel 
               withOwningScene:owningScene
               withLevelLoader:loader 
                 withHud:hud
               showTitle:NO
                startTileIndex:startIndex];
  NSLog(@"Got layer %@", layer);
  [owningScene replaceLayer:layer xMove:xOffset yMove:yOffset];
  [layer release];
  NSLog(@"Done");


Log messages:

        2011-01-24 21:38:03.541 Squirrel[14659:307] May change layer
    2011-01-24 21:38:03.544 Squirrel[14659:307] Level marked as finished
    2011-01-24 21:38:03.545 Squirrel[14659:307] Carver hidden
    2011-01-24 21:38:03.547 Squirrel[14659:307] game state loaded
    2011-01-24 21:38:03.550 Squirrel[14659:307] offset: 4, -22

Похоже, что код выходит из GameLevelLayer * layer = ..., после этого сообщения журнала не появляются, но, как вы можете видеть, они явнонет выхода в коде после этой точки.Любая идея, что может быть причиной этой проблемы?

Заранее спасибо!-Stephen

1 Ответ

0 голосов
/ 25 января 2011

Это может или не может помочь кому-то еще ... вот что происходило:

В GameLevelLoader был создан новый уровень.Объект на этом уровне был выше, чем я ожидал, и поэтому, когда он располагался случайным образом, я использовал arc4random% отрицательное число, что вызывало плохие вещи.Я не знаю, почему приложение продолжало работать в недопустимом состоянии, но проекты cocos2d, как правило, делают это иногда (даже после неудачной проверки).Исправление, чтобы проверить значение> 0, прежде чем сработала arc4random ().

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