ゲームでよく使うクラスがあり、インスタンス変数を typedef 構造体でグループ化して整理できたらいいなと思いました。これが役立つかどうかはまだ完全には確信していません。
もともと私のクラスヘッダーインターフェイスには、次のようなものがありました。
@interface ThingClass : CCLayer {
@public
bool _invulnerableToggled;
int _invulnerableCount;
int _invulnerableMax;
}
@property(nonatomic, assign) bool invulnerableToggled;
@property(nonatomic, assign) int invulnerableCount;
@property(nonatomic, assign) int invulnerableMax;
そして私の.mで
@synthesize
invulnerableToggled = _invulnerableToggled,
invulnerableCount = _invulnerableCount,
invulnerableMax = _invulnerableMax;
このクラスのサブクラスは、init でこれらの変数をデフォルト値に設定します。別のクラスがこのサブクラスのインスタンスにアクセスし、tempThing.invulnerableToggled = YES; のように、通常のドット表記を使用してそれに応じて値を設定できます。
typedef 構造体を使用しているため、値を調整できないように見え、それを克服するためにさまざまなことを試みました。そもそも設定がうまくいっていないせいもあるかもしれませんが、念のため今何をしているのかをお見せします。
現在、私のクラスヘッダー:
typedef struct {
bool toggled;
int count;
int max;
} Invulnerable;
@interface ThingClass : CCLayer {
@public
Invulnerable _invulnerable;
}
@property(nonatomic, assign) Invulnerable invulnerable;
そして私の.mで
@synthesize
invulnerable = _invulnerable;
これらの値をサブクラスの init で次のように設定します。
_invulnerable.toggled = NO;
_invulnerable.count = 0;
_invulnerable.max = 50;
これを別のクラスで設定しようとすると、現在の値に 1 が追加されることが予想されます。常に 1 のままです。この if ステートメントは 1 秒間に 60 回チェックされることがありますが、カウントは変わりません。
Invulnerable invulnerable = tempBaddy.invulnerable;
// check baddy invulnerability and increment if needed
if(invulnerable.toggled == YES){
int increase = invulnerable.count +1;
invulnerable.count = increase;
NSLog(@"invulnerable.count = %i", invulnerable.count);
}