iphone app中的脚本可以实例化一个变量

0 iphone scripting cocos2d-iphone

我试图理解在iphone游戏开发中使用像lua这样的脚本语言的好处(例如使用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;
 }
Run Code Online (Sandbox Code Playgroud)

该函数的问题是如果我有50个级别,这个函数将需要3页代码.我想用以下代码替换整个函数:

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

其中script>/script>是一种嵌入脚本语言的方法,该脚本语言将连接字符串"Level"和级别编号,从而创建类的名称.所以这个函数将与级别数无关.所以我的问题是:脚本可以帮忙吗?如果是,它怎么能帮助,如果没有,是否有解决方案呢?

Aur*_*ila 5

我建议这个:

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

是的,我只是节省了你打字的时间.