1

GameStateSingletonで毎回明示的に取得したくないゲームデータがいくつかある[[GameStateSingleton sharedMySingleton]getVariable]ので、そのようなことを行うことが可能かどうかを自問しました。

クラスのインターフェイスファイルで、のGameLayerようなプロパティと変数を設定しますsharedHealth

@interface GameLayer : CCLayer
{
    int sharedHealth;

}
@property (nonatomic,assign) int sharedHealth; 

そしてもちろん、実装でそれを合成します。

@synthesize sharedHealth;

GameLayerの初期化では、次のようなことをしたいと思います。

sharedHealth = [self getCurrentHealth];

対応するメソッドを追加します

-(int)getCurrentHealth{
   int myHealth = [[GameStateSingleton sharedMySingleton]getSharedHealth];
   return myHealth;
}

それは可能ですか?私が経験したことから、私はただクラッシュするようです。常に同じ変数を取得するため、常にlongメソッドを呼び出す必要がないという目標をどのように達成しますか?これには解決策が必要です...

4

2 に答える 2

2

そのためのインスタンス変数は必要ありません。次のようなショートカット関数を作成できます。

- (int)sharedHealth {
    return [[GameStateSingleton sharedMySingleton] getSharedHealth];
}

そして、その値が必要な場合はいつでも、を呼び出します[self sharedHealth]

代わりにプリプロセッサマクロを使用することもできます。これを定義するだけです:

#define SharedHealth [[GameStateSingleton sharedMySingleton] getSharedHealth]

そして、値が必要なときにそれを使用するだけです。

getVariableObjective-Cでは、ゲッターメソッドを「 」ではなく単に「」と呼ぶことに注意してくださいvariable。ほとんどの場合、これは慣例ですが、KVCまたはKVOの使用を開始する場合は、従わなければならない規則です。ですから、できるだけ早くそれに慣れることをお勧めします。

于 2012-05-26T12:07:34.603 に答える
0

避けようとしているのが繰り返し入力だけの場合は、古いCの方法を使用できます...

#define GAME_STATE [GameStateSingleton sharedMySingleton]

...その後...

int localValue = [GAME_STATE property];
于 2012-05-26T12:14:43.583 に答える