iphone应用程序中的脚本能否实例化变量

iphone应用程序中的脚本能否实例化变量,iphone,scripting,cocos2d-iphone,Iphone,Scripting,Cocos2d Iphone,我试图了解在iphone游戏开发中使用lua这样的脚本语言的好处(例如使用cocos2d),以及它是否能帮助解决我的问题(并提高我的编码技能)。 在我的游戏中,我有以下代码: -(void)MenuItem:(CCMenuItem *) menuItem { switch (menuItem.tag) { case 1: [[CCDirector sharedDirector] replaceScene:[Level1 scene]]; break; case 2:

我试图了解在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;
 }
该函数的问题是,如果我有50个级别,该函数将占用3页代码。我想将整个功能替换为:

-(void)MenuItem:(CCMenuItem  *) menuItem {
[[CCDirector sharedDirector] replaceScene:[<script> @"Level" + menuItem.tag</script> scene]];
}
-(void)菜单项:(CCMenuItem*)菜单项{
[[CCDirector sharedDirector]replaceSecene:[@“Level”+menuItem.tag scene]];
}
其中script>/script>是一种嵌入脚本语言的方法,该语言将字符串“Level”和Level number连接起来,从而创建类的名称。所以这个函数与能级数无关。 所以我的问题是:脚本可以帮助吗?如果是,它有什么帮助?如果不是,有没有解决办法

我建议:

NSString *levelToLoad = [NSString stringWithFormat:@"Level%d", menuItem.tag];
[[CCDirector sharedDirector] replaceScene:[NSClassFromString(levelToLoad) scene]];
是的,我刚刚帮你省了几个小时的打字时间

我建议:

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

是的,我刚刚帮你省了几个小时的打字时间

AppStore规则禁止在应用程序中使用脚本语言

但这不是您的问题,您可以使用反射API:

[[NSClassFromString([NSString stringWithFormat:@"Level%i", menuItem.tag]) scene]];
这并不是最好的方法,因为你控制着所有的代码,所以你不需要使用它,它“只工作”而且感觉很粗糙。 您应该实现一个级别管理器,让它为您搜索给定的级别(示例):


AppStore规则禁止在应用程序中使用脚本语言

但这不是您的问题,您可以使用反射API:

[[NSClassFromString([NSString stringWithFormat:@"Level%i", menuItem.tag]) scene]];
这并不是最好的方法,因为你控制着所有的代码,所以你不需要使用它,它“只工作”而且感觉很粗糙。 您应该实现一个级别管理器,让它为您搜索给定的级别(示例):


伙计,什么?我的经理要做什么?我不明白?我以为他在试图避免键入~200行的switch语句…[MyLevel Manager registerLevel:level withId:someId];对于每个级别的子类。级别管理器可以轻松地将级别id映射到f.e.数组索引或字典键。确定。这有点道理。不过,对于OP想要做的事情,NSClassFromString将会更快。如果他有不一致的命名习惯,那就另当别论了。哥们,什么?我的经理要做什么?我不明白?我以为他在试图避免键入~200行的switch语句…[MyLevel Manager registerLevel:level withId:someId];对于每个级别的子类。级别管理器可以轻松地将级别id映射到f.e.数组索引或字典键。确定。这有点道理。不过,对于OP想要做的事情,NSClassFromString将会更快。如果他有不一致的命名惯例,那就另当别论了。