我试图理解在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]];
}
其中脚本&gt; /脚本&GT;将是一种嵌入脚本语言的方法,该脚本语言将连接字符串“Level”和级别编号,从而创建类的名称。所以这个函数将与级别数无关。 所以我的问题是:脚本可以帮忙吗?如果是,它怎么能帮助,如果没有,是否有解决方案呢?
答案 0 :(得分:5)
我建议:
NSString *levelToLoad = [NSString stringWithFormat:@"Level%d", menuItem.tag];
[[CCDirector sharedDirector] replaceScene:[NSClassFromString(levelToLoad) scene]];
是的,我只是为你节省了数小时的打字时间。
答案 1 :(得分:0)
AppStore规则禁止在您的应用中使用脚本语言。
但这不是你的问题,你可以使用反射API:
[[NSClassFromString([NSString stringWithFormat:@"Level%i", menuItem.tag]) scene]];
这不是最好的方法,因为你可以控制所有的代码,因此你不需要使用它,它“只是工作”并且感觉很烦。 您应该实现一个级别管理器并让它为您搜索给定的级别(示例):
[MyLevelManager levelWithId:menuItem.tag];