我使用cocos2D,DebugZoneLayer和HeroClass在Objective C中有两个主要的类。使用Cocos2D可能不是问题的一部分。
HeroClass包含CGPoint和属性。我在DebugZoneLayer中有一个HeroClass实例,初始化为 hero = [[HeroClass alloc] init];
我的HeroClass.h缩短为向您展示我如何创建CGPoint vel。
@interface HeroClass : CCLayer {
@public CGPoint _vel;
}
@property(assign) CGPoint vel;
在HeroClass.m中,我合成了我的属性,如 @synthesize vel = _vel;
在DebugZoneLayer.m中,我可以引用我的hero.vel x或y就好了,但是为hero.vel x或y赋值的任何内容都会返回错误: Lvalue作为赋值的左操作数
答案 0 :(得分:1)
这是对的 - 你做不到。属性只是一个方法调用,Objective-C中的方法总是按值返回,这意味着返回的CGPoint只是一个临时CGPoint,其值与对象中的值相同。不允许设置此临时值的组件。您需要在类上为点的X和Y值创建特殊的setter,或者一次设置整个点。
答案 1 :(得分:1)
以不同的方式重述Chuck完全正确的答案..
您的问题是CGPoints不是Objective-c对象,它们是C结构。您的属性* _vel *不是Object的实例,如NSArray,NSArray或DebugZoneLayer。
作为一个简单而懒惰的例子,使用int而不是结构和一些伪代码...
@interface HeroClass : CCLayer {
int _numberOfLives;
}
@end
@implementation HeroClass
- (id)init {
[super init];
_numberOfLives = 3;
}
- (int)livesRemaining {
return _numberOfLives;
}
@end
你不能像这样设置_numberOfLives的值..
foo = [[HeroClass alloc] init];
bar = [foo livesRemaining];
bar = 2;
更改栏的值不会更改foo的 _numberOfLives 实例变量的值,因为当您调用 -livesRemaining 时, bar 设置为 _numberOfLives 的当前值的副本。
简而言之,你需要向你学习一些C.