2011-05-02 27 views
0

我有兩個主要的類在目標C使用cocos2D,DebugZoneLayer和HeroClass。使用Cocos2D可能不是問題的一部分。CGPoint屬性用於從其他類與左值錯誤的類

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返回錯誤:左值要求作爲分配

的左操作數
+0

看一看[此最近的問題(http://stackoverflow.com/questions/5860755/)。 – 2011-05-02 21:15:07

回答

1

是的 - 你不能那樣做。屬性只是一個方法調用,Objective-C中的方法總是按值返回,這意味着返回的CGPoint只是一個臨時CGPoint,其值與對象中的值相同。不允許設置此臨時值的組件。你需要在你的課堂上爲該點的X和Y值創建特殊的setter,或者一次設置整個點。

+0

謝謝。我一次只設置我的整個CGPoint。 – VagueExplanation 2011-05-02 21:08:28

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價值實例變量,因爲當你叫-livesRemainingbar被設置爲當前值的副本_numberOfLives

總之,你需要了解你一些C.