2009-03-30 4 views
1

저는 GameScene이라는 클래스를 가지고 있고, with는 cocos2d Scene의 서브 클래스입니다.Objective-C로 하나의 객체에서 다른 객체로 값 전달하기

거기에는 두 개의 레이어가 있습니다. GameLayer 및 ControlsLayer. ControlsLayer가 GameLayer에서 물건을 움직이기를 원한다는 것을 이미 말할 수 있습니다. 정확하게 말하자면, ControlsLayer에서 GameLayer의 cPBody를 제어하려고합니다.

현재 컨트롤 레이어의 지침을 GameScene으로 라우팅 한 다음 다시 GameLayer로 라우팅하려고합니다. 그 말이 맞는다면. 어쨌든, 나는 그것이 작동하도록 할 수 없습니다. 나는 PHP 배경을 가지고있어서 Obj-C에 제 PHP 경험을 잘못 적용하고 있다고 생각합니다.

내 생각이 작동합니다 것 같습니다, 내가보고했던 샘플 코드에서

aThing *someThing = someInstance->aThing; 

같은 것을 사용하여 클래스/객체 내부 속성에 액세스 할 수 있어야합니다. 그러나 그렇지 않습니다. 가능한 한 많이 줄인 코드입니다. http://pastebin.com/d49c9d0be

이 특정 문제를 해결하는 방법을 알기보다는 오히려 이해하지 못하는 것은 무엇입니까?

+0

pastebin 코드에서 myBody라는 로컬 변수를 만들거나 클래스의 변수를 지정하려고합니까? – jblocksom

+0

무슨 뜻인지 잘 모르겠다. GameScene init 메소드 내부에 대해 이야기하고있는 중이라면 지금은 GameLayer 내부의 myBody 속성에 오류를 생성하지 않고 액세스하려고합니다. – gargantuan

+0

로컬 변수는 함수 또는 메서드 내에 있습니다. 인스턴스 변수는 클래스의 인스턴스 안에 있고 그 클래스의 인터페이스에서 선언됩니다. –

답변

3

Objective-C에서는 인스턴스 변수에서 접근하기 위해 접근 자 메서드를 정의해야합니다. 동일한 클래스 유형에서 호출하지 않는 한 직접 액세스 할 수 없습니다 (예 : NSCopying 프로토콜 및 개인 변수를 설정해야하지만 지금은 걱정하지 않아도됩니다.)

가장 쉬운 방법은 @property(retain) SomeClass *name;을 사용하여 헤더에 속성을 정의하고 Objective-C가 @synthesize name = instanceVariable;을 구현하여 생성하도록하는 것입니다. 그런 다음 object.name; 또는 [object name];을 사용하여 해당 클래스 외부의 변수에 액세스 할 수 있습니다. 자세한 내용은 속성 및 객체 지향 프로그래밍에 대한 설명서를 참조하십시오.

+0

@property (retain) SomeClass * 이름을 선언하는 경우 - (void) dealloc 메서드에서도 [release name]을 사용해야 함을 명심하십시오 –

1

어떤 모양의 gameLayer.myBody 속성도 노출되지 않습니다. @property 선언 (objective-c 2.0 가정)을 사용해야합니다 (여기에 example).

PHP 배경이 없으므로 PHP에서 어떻게 다른지 모릅니다.

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

또는

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

당신이 C로 코딩 된 경우에서, -> 운영자가 나을 다음과 같이

1

객체의 속성에 액세스하는 올바른 방법입니다. 그러나 objective-c에서는 객체가 항상 포인터를 통해 전달됩니다. objective-c 변수는 실제로 객체를 보유하지 않으며 객체에 대한 포인터 만 보유합니다. 언어 설계자는 회원에게 액세스하기 위해 간단히 [] 또는 . 구문을 사용하기로 결정 했으므로 그렇게해야합니다.

관련 문제