1

ゲームでよく使うクラスがあり、インスタンス変数を 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);
}
4

1 に答える 1

0

これは ObjC では一般的な方法ではありませんが、参照によって構造体を渡すことができます。つまり、構造体へのポインターを返します。

@interface ThingClass : CCLayer {
@protected
    Invulnerable _invulnerable;
}

@property(nonatomic, readonly) Invulnerable* invulnerable;

@end

*.m ファイル:

@implementation ThingClass

- (Invulnerable*)invulnerable {
    return &_invulnerable;
}

@end

データの更新:

Invulnerable* invulnerable = tempBaddy.invulnerable;
// check baddy invulnerability and increment if needed
if(invulnerable->toggled == YES){
    invulnerable->count++;
    NSLog(@"invulnerable.count == %i", tempBaddy.invulnerable->count);
}

ThingClass (またはそのサブクラス) のインスタンスに対して何らかのアクションを実行しようとしていると思います。そして、アクションは _invulnerable の値に影響します。この場合、より一般的な方法は、必要なすべての更新を実行するメソッドを Thing クラスに配置することです。

@implementation ThingClass

- (void)headshot {
    if (_invulnerable.toggled) {
        _invulnerable.count++;

    } else {
        [self die];
    }
}

@end
于 2013-06-09T16:50:27.207 に答える