Свойство CGPoint, используемое в классе из другого класса с ошибкой Lvalue - PullRequest
0 голосов
/ 03 мая 2011

У меня есть два основных класса в цели C, использующих cocos2D, DebugZoneLayer и HeroClass. Использование Cocos2D не может быть частью проблемы.

HeroClass содержит CGPoint и свойство. У меня есть экземпляр HeroClass в DebugZoneLayer, инициализированный как 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, возвращает ошибку: L-значение требуется в качестве левого операнда присваивания

Ответы [ 2 ]

1 голос
/ 03 мая 2011

Пересмотр совершенно правильного ответа Чака другим способом.

Ваша проблема в том, что CGPoints не являются объектами Objective-c, а являются C-структурами.Ваше свойство * _vel * не является экземпляром объекта, как NSArray, NSArray или DebugZoneLayer.

В качестве простого и ленивого примера, используя int вместо struct и немного psuedocode ..

@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;

Изменение значения bar не приведет к изменению значения переменной экземпляра foo _numberOfLives , поскольку при вызове -livesRemaining , bar было установлено на копию текущего значения _numberOfLives .

Короче говоря, вам нужно научиться немного C.

1 голос
/ 03 мая 2011

Это верно - вы не можете этого сделать.Свойство - это просто вызов метода, и методы в Objective-C всегда возвращаются по значению, означая, что возвращаемая CGPoint - это просто временная CGPoint с тем же значением, что и в вашем объекте.Установка компонентов этого временного значения не допускается.Вам нужно будет либо создать специальные сеттеры в своем классе для значений точки X и Y, либо задать всю точку за раз.

...