我在游戏中经常使用一个类,我认为通过将实例变量与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);
}
答案 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