2011-01-26 4 views
0

iphoneのゲーム開発でluaなどのスクリプト言語を使用する利点を理解しようとしています(これはcocos2dを使用しています)。スキル)。 私のゲームでは、私は次のコードを持っている: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]]; 
} 

:私はこの全体の機能を交換したいと思いますクラス。したがって、この関数はレベル数に依存しません。 私の質問は次のとおりです:スクリプトのヘルプができますか?はいの場合は、どうすればそれを助けることができますか?そうでない場合は、その解決策がありますか?

答えて

5

私はこのことをお勧めしたい:

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

ええ、私はちょうどあなたのタイピングの時間を保存します。

+0

あなたがやったそうそう、ありがとうございました。 – Cyril

+1

+1「うん、ちょっと時間を節約できました」 :) –

0

AppStoreのルールでは、アプリでスクリプト言語を使用することは禁止されています。したがって、あなたが必要としない、

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

あなたはすべてのコードの制御にあるので、行くための最善の方法ではありません。

しかし、それはあなたの問題ではありませんが、あなたは、リフレクションAPIを使用することができますそれを使用するには、それは "ちょうどうまくいく"と感じ、ハッキーを感じる。あなたは、かなりレベルのマネージャーを実装し、それはあなたのために与えられたレベル(一例)を探している必要があり :

[MyLevelManager levelWithId:menuItem.tag]; 
+0

おい、何? MyLevelManagerは何をしようとしていますか?理解できません? 〜200行のswitch文を入力しないようにしようとしていると思っていた。 –

+0

[MyLevelManager registerLevel:level withId:someId];各レベルのサブクラスごとにレベルマネージャはレベルIDをf.eに簡単にマップできます。配列インデックスまたは辞書キー – arul

+0

それはもう少し意味があります。それでも、OPが何をしたいのか、NSClassFromStringは高速になるでしょう。彼が命名規則に矛盾があるならば、それは別の話だろう。 –

関連する問題