Может ли сценарий в приложении iphone создать переменную - PullRequest
0 голосов
/ 26 января 2011

Я пытаюсь понять преимущества использования языка сценариев, такого как lua, при разработке игр на iphone (например, с использованием cocos2d) и может ли это помочь решить мою проблему (и улучшить мои навыки кодирования).В моей игре у меня есть следующий код:

-(void)MenuItem:(CCMenuItem  *) menuItem {
 switch (menuItem.tag) {
  case 1:
   [[CCDirector sharedDirector] replaceScene:[Level1 scene]];
   break;
  case 2:
   [[CCDirector sharedDirector] replaceScene:[Level2 scene]];
   break;
  case 3:
   [[CCDirector sharedDirector] replaceScene:[Level3 scene]];
   break;
  case 4:
   [[CCDirector sharedDirector] replaceScene:[Level4 scene]];
   break;
  case 5:
   [[CCDirector sharedDirector] replaceScene:[Level5 scene]];
   break;
  case 6:
   [[CCDirector sharedDirector] replaceScene:[Level6 scene]];
   break;
  case 7:
   [[CCDirector sharedDirector] replaceScene:[Level7 scene]];
   break;
  case 8:
   [[CCDirector sharedDirector] replaceScene:[Level8 scene]];
   break; 
  default:
   break;
 }

Проблема с этой функцией заключается в том, что если у меня 50 уровней, эта функция займет 3 страницы кода.Я хотел бы заменить всю эту функцию на:

-(void)MenuItem:(CCMenuItem  *) menuItem {
[[CCDirector sharedDirector] replaceScene:[<script> @"Level" + menuItem.tag</script> scene]];
}

, где script> / script> будет способом встроить язык сценариев, который объединит строку «Level» и номер уровня, создавая таким образомНаименование класса.Так что эта функция не будет зависеть от количества уровней.Поэтому мой вопрос: может ли помочь сценарий?Если да, как это может помочь, и если нет, есть ли решение для этого?

Ответы [ 2 ]

5 голосов
/ 26 января 2011

Я бы предложил это:

NSString *levelToLoad = [NSString stringWithFormat:@"Level%d", menuItem.tag];
[[CCDirector sharedDirector] replaceScene:[NSClassFromString(levelToLoad) scene]];

Да, я просто сэкономил вам часы набора текста.

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

Правила AppStore запрещают использование языков сценариев в ваших приложениях.

Но это не ваша проблема, вы можете использовать API отражения:

[[NSClassFromString([NSString stringWithFormat:@"Level%i", menuItem.tag]) scene]];

Это не лучший способ, так как вы контролируете весь код, поэтому выне нужно его использовать, он «просто работает» и чувствует себя хакером.Вам лучше реализовать менеджер уровней и попросить его найти для вас данный уровень (пример):

[MyLevelManager levelWithId:menuItem.tag];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...