在Objective-C中创建和设置typedef结构值

时间:2013-03-12 16:19:17

标签: objective-c variables struct set typedef

我在游戏中经常使用一个类,我认为通过将实例变量与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语句有时每秒检查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);
}

1 个答案:

答案 0 :(得分: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