0

私はjavascriptなどの言語でeval()を使用することに慣れています

cocos2dでは、レベルを選択するために、Loadlevel.mファイルに「1」または「2」を渡します。レベルクラスには「LevelOne」および「LevelTwo」という名前が付けられているため、「1」を使用した辞書ルックアップを作成しました。 "=>" LevelOne "など、その文字列に対してevalを実行して、[MyLevelノード]を効果的に呼び出します。

どうやらIOSコードでevalを使用できないので、どうすればこれを実行できますか?

4

2 に答える 2

1

私はあなたが何を求めているのか100%明確ではありませんが、クラスオブジェクトを辞書に直接保存し、それらを取得して、メッセージを送信することができます。

NSDictionary * d = [NSDictionary dictionaryWithObjectsAndKeys:[LevelOne class], @"1", [LevelTwo class], @"2", nil];

Class selectedLevel = [d objectForKey:@"1"];

[selectedLevel node];
于 2012-06-13T05:29:56.677 に答える
1

NSStringFromClassandNSClassFromString関数を使用してみてください。

具体的には、クラスを辞書内の文字列として表します。たとえば、

[myDictionary setObject:NSStringFromClass([LevelOne class]) forKey:@"1"]

次に、辞書から適切なレベルを使用するには、次のようにします。

NSString *levelAsString = [myDictionary objectForKey:@"1"];
id node = [NSClassFromString(levelAsString) node]

(私は+nodeクラスメソッドだと思います)

さて、これはココアではかなり珍しい奇妙なデザインです。おそらく、あなたがしていることについてもっと説明するなら、私たちはより良いかもしれない別のデザインの選択を提案することができます。

于 2012-06-13T05:28:32.540 に答える