2011-01-26 96 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]; 
相關問題