2009-03-30 3 views
1

У меня есть класс под названием GameScene, с подклассом сцены cocos2d.Передача значения из одного объекта в другой с Objective-C

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

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

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

aThing *someThing = someInstance->aThing; 

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

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

+0

В коде pastebin вы пытаетесь создать локальную переменную myBody или назначить что-то одному в классе? – jblocksom

+0

не совсем уверен, что вы имеете в виду. Если вы говорите внутри метода инициализации GameScene, на данный момент я просто пытаюсь получить доступ к свойству myBody внутри GameLayer без возникновения ошибки. – gargantuan

+0

Локальные переменные находятся внутри функции или метода; переменная экземпляра находится внутри экземпляра класса и объявляется в интерфейсе этого класса. –

ответ

3

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

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

+0

Имейте в виду, что если вы объявите имя @property (сохранить) SomeClass *, вам также придется [release name] в вашем методе dealloc (void) –

1

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

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

1

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

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

или

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

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

Смежные вопросы