Передача значения из одного объекта в другой с помощью Objective-C - PullRequest
1 голос
/ 30 марта 2009

У меня есть класс GameScene, с подклассом cocos2d Scene.

Там у меня есть два слоя. GameLayer и ControlsLayer. Вы, вероятно, уже можете сказать, что я хочу, чтобы ControlsLayer перемещал вещи в GameLayer. Если быть точным, я пытаюсь управлять cPBody в GameLayer из ControlsLayer.

В данный момент я пытаюсь направить инструкции из ControlsLayer обратно в GameScene, а затем обратно в GameLayer. Если это имеет смысл. Во всяком случае, я не могу заставить его работать. У меня есть опыт работы с PHP, поэтому я неправильно применяю свой опыт работы с PHP в Obj-C.

Я думаю, я должен иметь возможность получить доступ к свойству внутри класса / объекта, используя что-то вроде

aThing *someThing = someInstance->aThing;

Из примера кода, на который я смотрел, похоже, это должно работать. Но это не так. Вот код, сокращенный до максимально возможного значения http://pastebin.com/d49c9d0be

Вместо того, чтобы знать, как решить эту конкретную проблему, вопрос в том, что я не понимаю?

Ответы [ 3 ]

3 голосов
/ 30 марта 2009

В Objective-C вам нужно определить методы доступа, чтобы получить переменную экземпляра, вы не можете напрямую получить к ней доступ, если не вызываете ее из того же типа класса (например, когда вы реализуете NSCopying). протокол и необходимо установить частные переменные, но не беспокойтесь об этом сейчас).

Самый простой способ сделать это - определить свойство в вашем заголовке, используя @property(retain) SomeClass *name;, и заставить Objective-C сгенерировать его, поместив @synthesize name = instanceVariable; в вашу реализацию. Затем вы можете получить доступ к переменной вне этого класса, используя object.name; или [object name] ;. Для получения дополнительной информации смотрите документацию по свойствам и объектно-ориентированному программированию.

1 голос
/ 30 марта 2009

Правильный способ получить доступ к свойству объекта заключается в следующем:

aThing * someThing = someInstance.aThing; // new style

или

aThing * someThing = [someInstance aThing]; // old style

Если бы вы кодировали в c, оператор -> имел бы смысл. Однако в target-c объекты всегда передаются через указатели. Ни одна переменная target-c никогда не содержит объект, они просто содержат указатели на объекты. Разработчики языка просто решили использовать синтаксис [] или . для доступа к членам, вот что мы должны сделать!

1 голос
/ 30 марта 2009

Вы не выставляете свойство gameLayer.myBody в любой форме. Вам придется использовать объявление @property (при условии, что цель-c 2.0) (вот пример ).

У меня нет фона PHP, поэтому я не знаю, как он может отличаться в PHP.

...