2012-08-01 3 views
0

하위 클래스의 클래스를 모르는 스프라이트가 있습니다. 현재 클래스의 스프라이트에 추가해야하는 모든 자식을 유지할 수 있기 때문에 현재 CCLayer를 사용하지만 터치 이벤트는 모든 겹치는 레이어에서 감지되며 너무 영리하지 않을 수 있습니다. 그래서 평신도 용어로, 나는 그것을 만졌을 때 화염을 추가해야하는 곳에서 화염 방사기를 갖고 싶습니다. 나는 FlameThrower.h 클래스 (CCLayer 하위 클래스)에 화염을 추가하여이를 수행합니다. CCSprite를 하위 클래스로 만들면 부모 클래스에도 화염을 추가해야하는데 이는 비효율적입니다. 여기에 올바른 접근?내 스프라이트에 CCLayer 또는 CCSprite 클래스를 사용 하시겠습니까?

답변

1

당신이 필요로하지 않을 수는 CCSprite 또는 모든 CCLayer를 subclasssing합니다.

이 내가 더 자주 논의 될 것이다하고자하는 기본적인 Cocos2D 게임 아키텍처 문제입니다. 게임에 대한

내가 만든 NSObject 또는 CCNode를 기본 클래스로 사용하여 문자를 만듭니다.

이러한 문자 컨트롤러 클래스는 문자의 AI에 대한 논리를 실행하고, 문자가 물리적인 경우 물리 본문을 소유하며 문자를 나타내는 하나 이상의 스프라이트를 제어합니다.

문자 컨트롤러에 CCNode에서 제공하는 속성이나 기능이 필요하지 않은 경우 일반적으로 물리 기반 문자의 경우 인 NSObject를 하위 클래스로 지정합니다.

사용자 입력은 대개 HUD 소유이지만 게임 월드의 특정 캐릭터에 직접 입력하려는 경우가 있습니다. 이 경우 CCLayer를 하위 클래스로 추가하여 터치 및 가속도계를 추가하거나 CCNode의 하위 클래스를 만들고 터치 디스패처에 등록 할 수 있습니다.

보통 캐릭터의 스프라이트를 캐릭터 컨트롤러가 만들고 소유하는 별도의 클래스로 만듭니다.

내가 만든 게임에는 일반적으로 1 ~ 4 개의 스프라이트 시트가 있으며 GameManager 클래스에서이를 CCSpriteBatchNodes로로드하고 CCSpriteFrameCache에로드 한 다음 문자를 월드 와이드 스크립팅 엔진을 통해 만들면 필요한 참조를 전달합니다. 그 문자에 스프라이트를 추가하기 위해 배치 노드를 사용할 수 있도록 해당 문자에 대한 CCSpriteBatchNode.

캐릭터는 업데이트되고 관리되고 결국 파괴되고 정리되는 GameManager 또는 패 런트 캐릭터에 등록됩니다.

물리학 기반 문자의 경우 일반적으로 physics 본문이 노드 또는 노드가 나타내는 스프라이트를 제어하는 ​​대신 직접 노드의 동작을 제어하지 않으려면 CCNode (훨씬 적은 CCLayer 또는 CCSprite)를 서브 클래스화할 필요가 없습니다. NSObject가 소유하게됩니다.

+0

감사합니다. 예, 나는 또한 CCNode로 갔다. 솔직히 왜 CCNode와 CCLayer 사이에 아무 것도없는 이유를 이해하지 못합니다. 내가 직면 한 문제는 경계 상자가 포함 된 자식에 의해 정의 된 노드에서 터치 감지 기능입니다. 내가 아는 한, 이것은 게임 엔진의 매우 중요한 요소가 될 것입니다. –

관련 문제