2011-01-26 97 views
0

我想(例如使用cocos2d的),如果它可以帮助解决我的问题(并提高我的编码来了解使用脚本语言如在iPhone上的游戏开发卢阿的好处技能)。 在我的比赛,我有以下代码:可以编写脚本在iPhone应用程序实例变量

-(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>将嵌入的脚本语言,将连接字符串“级别”和电平数,从而开创的名字的一种方法班上。所以这个函数将独立于层数。 所以我的问题是:脚本可以帮助吗?如果是的话,它将如何提供帮助,如果没有,是否有解决方案?

回答

5

我建议这样的:

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

啊,我只是救了你打字的时间。

+0

哦,是你做了,太感谢你了。 “ – Cyril 2011-01-26 11:47:21

+1

+1”是的,我只是节省了你几个小时的打字时间。“ :) – 2011-01-27 10:18:53

0

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

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

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

这并不是最好的方法,因为你在所有的代码控制,因此你不需要使用它,它“只是起作用”,感觉很不舒服。 你还是实现一个级别的经理,并已将其搜索给定的级别为你(例如):

[MyLevelManager levelWithId:menuItem.tag]; 
相关问题