하위 클래스의 클래스를 모르는 스프라이트가 있습니다. 현재 클래스의 스프라이트에 추가해야하는 모든 자식을 유지할 수 있기 때문에 현재 CCLayer를 사용하지만 터치 이벤트는 모든 겹치는 레이어에서 감지되며 너무 영리하지 않을 수 있습니다. 그래서 평신도 용어로, 나는 그것을 만졌을 때 화염을 추가해야하는 곳에서 화염 방사기를 갖고 싶습니다. 나는 FlameThrower.h 클래스 (CCLayer 하위 클래스)에 화염을 추가하여이를 수행합니다. CCSprite를 하위 클래스로 만들면 부모 클래스에도 화염을 추가해야하는데 이는 비효율적입니다. 여기에 올바른 접근?내 스프라이트에 CCLayer 또는 CCSprite 클래스를 사용 하시겠습니까?
답변
당신이 필요로하지 않을 수는 CCSprite 또는 모든 CCLayer를 subclasssing합니다.
이 내가 더 자주 논의 될 것이다하고자하는 기본적인 Cocos2D 게임 아키텍처 문제입니다. 게임에 대한
내가 만든 NSObject 또는 CCNode를 기본 클래스로 사용하여 문자를 만듭니다.
이러한 문자 컨트롤러 클래스는 문자의 AI에 대한 논리를 실행하고, 문자가 물리적인 경우 물리 본문을 소유하며 문자를 나타내는 하나 이상의 스프라이트를 제어합니다.
문자 컨트롤러에 CCNode에서 제공하는 속성이나 기능이 필요하지 않은 경우 일반적으로 물리 기반 문자의 경우 인 NSObject를 하위 클래스로 지정합니다.
사용자 입력은 대개 HUD 소유이지만 게임 월드의 특정 캐릭터에 직접 입력하려는 경우가 있습니다. 이 경우 CCLayer를 하위 클래스로 추가하여 터치 및 가속도계를 추가하거나 CCNode의 하위 클래스를 만들고 터치 디스패처에 등록 할 수 있습니다.
보통 캐릭터의 스프라이트를 캐릭터 컨트롤러가 만들고 소유하는 별도의 클래스로 만듭니다.
내가 만든 게임에는 일반적으로 1 ~ 4 개의 스프라이트 시트가 있으며 GameManager 클래스에서이를 CCSpriteBatchNodes로로드하고 CCSpriteFrameCache에로드 한 다음 문자를 월드 와이드 스크립팅 엔진을 통해 만들면 필요한 참조를 전달합니다. 그 문자에 스프라이트를 추가하기 위해 배치 노드를 사용할 수 있도록 해당 문자에 대한 CCSpriteBatchNode.
캐릭터는 업데이트되고 관리되고 결국 파괴되고 정리되는 GameManager 또는 패 런트 캐릭터에 등록됩니다.
물리학 기반 문자의 경우 일반적으로 physics 본문이 노드 또는 노드가 나타내는 스프라이트를 제어하는 대신 직접 노드의 동작을 제어하지 않으려면 CCNode (훨씬 적은 CCLayer 또는 CCSprite)를 서브 클래스화할 필요가 없습니다. NSObject가 소유하게됩니다.
- 1. CCMenu의 앵커 포인트 또는 cocos2d의 CCLayer
- 2. CCLayer 두통에 액세스!
- 3. CCSpriteFrameCache 또는 CCSprite? - Cocos2d
- 4. cocos2D CCLayer 또는 CCLayerColor setOpacity
- 5. Cocos2d-iPhone에서 CCSprite 상속하기
- 6. 클래스를 속성으로 사용 하시겠습니까?
- 7. CCSprite runAction : 충돌합니다.
- 8. 플렉스 MXML (또는 스파크?) 컴포넌트를 플래시/AS3 스프라이트에 래핑 하시겠습니까?
- 9. CCSprite in cocos2d v2.0 rc0
- 10. 서비스의 전역 변수 : application 또는 SharedPreferences 클래스를 사용 하시겠습니까?
- 11. 다른 CCLayer 위에 프레임이있는 CClayer를 추가 하시겠습니까?
- 12. Cocos2d : 여러 스프라이트에 단일 타이머/스케줄러 사용
- 13. CCMenu에 CCLayer 추가
- 14. CCSprite + NSCoding
- 15. C# - 부분 클래스 또는 별도의 클래스를 사용 하시겠습니까?
- 16. ccsprite 추적 cocos2d-iphone
- 17. b2Body가 움직일 때 CCSprite 위치를 업데이트 하시겠습니까?
- 18. NSMutableArray에서 스프라이트에 액세스하면 오류가 발생합니다 - 간단한 질문
- 19. CCSprite 초기화 프로그램이 예외 또는 오류없이 충돌을 일으킴
- 20. 애니메이션 중 CCSprite 프레임 번호
- 21. 움직이는 스프라이트에 애니메이션 적용
- 22. 반사없이 바이트 배열의 클래스를 사용 하시겠습니까?
- 23. Cocos2d CCScene & CCLayer 설정
- 24. Animate CCSprite
- 25. XNA에서 내 스프라이트에 대한 경계를 지정하는 문제
- 26. 부울 또는 has_many를 사용 하시겠습니까?
- 27. 스프라이트에 임의의 Y를 생성합니다.
- 28. 기본 색상을 사용하지 않고 CCSprite 채색
- 29. cocos2d 하위 클래스 CCSprite
- 30. 예외 클래스를 전송 메커니즘으로 만 사용 하시겠습니까?
감사합니다. 예, 나는 또한 CCNode로 갔다. 솔직히 왜 CCNode와 CCLayer 사이에 아무 것도없는 이유를 이해하지 못합니다. 내가 직면 한 문제는 경계 상자가 포함 된 자식에 의해 정의 된 노드에서 터치 감지 기능입니다. 내가 아는 한, 이것은 게임 엔진의 매우 중요한 요소가 될 것입니다. –