2012-08-11 2 views
0

저는 UI 버프입니다. 내 게임의 모든 "화면"이 나타나거나 사라지면 전환해야합니다. 내 게임은 리소스면에서 간단하기 때문에 각 "화면"을 CCLayer로 만들고 전환을위한 함수를 정의하여 모든 것을 메모리에 남겨 두었습니다. 그것은 내가 예상했던 것보다 더 복잡해지고 있습니다.CCScene과 CCLayer를 언제 사용합니까?

1) 각 "화면"는 CCLayer입니다 :

는 내가 지금 두 가지 문제가있다 생각합니다. 이것은 괜찮은 것처럼 보이지만, 터치 이벤트가 중단 된 경우에도 터치 이벤트가 중단되는 것처럼 보일 수 없습니다. 하위 스프라이트는 isTouchEnabled 속성을 존중하는 것처럼 보이지 않으므로 항상 보이지 않는 버튼을 누릅니다.

2) 기본적으로 주마다 약간의 텍스처가있는 스프라이트 인 맞춤형 버튼 클래스를 작성했습니다. CCTargetedTouchDelegate 프로토콜을 사용합니다. 나는 이것이 위의 문제의 큰 부분이라고 생각하고 있습니다.

CCMenu 항목에 대해서는 명확하지 않습니다. 거기에 자습서 또는 설명서가 더 나은 그 설계 목적을 설명하고 그것을 사용하는 방법 있나요? cocos2d에 대한 문서는 각 클래스의 기능에 대해 전혀 말하지 않기 때문에 라이브러리를 제대로 사용하는 것이 훨씬 더 어렵습니다. 또한 레이어 대신 장면을 사용해야합니까? 커스텀 트랜지션을 작성할 수 있습니까?

+2

장면은 노드 계층의 최상위 노드에 불과합니다. 이 요구 사항 이외에 CCNode 일 수도 있습니다. 마찬가지로 내장 터치 지원이 필요하지 않은 경우 CCLayer 대신 CCScene을 사용할 수 있습니다. – LearnCocos2D

답변

0

메뉴에 CCScenes를 사용하는 것이 더 편리합니다. 비활성 CCScene의 모든 하위 항목은 터치 이벤트를받지 않으므로 해당 동작을 관리 할 필요가 없습니다. CCScenes에는 크로스 페이드 (crossfade)와 같은 내장 전환 기능이 있지만, 나 같은 사람이라면 장면 전환을위한 액션을 실행 한 다음 CCDirector : replaceScene을 호출하기 만하면됩니다.

0

메인 메뉴 (전체 장면보다로드 게임, 새로운 게임 등을위한 레이어가 더 간단함)와 같이 메뉴의 단일 장면에 여러 레이어가있는 경우, 당신 층의 자식으로 버튼; 터치를받지 못하게하려면 사용하지 않을 때 화면에서 해당 레이어를 이동하면됩니다. 예제가 있습니다.

[loadLayer setPosition:CGPointMake(-1000,-1000)]; 
[settingsLayer setPosition:CGPointMake(-1000,-1000)]; 
[menuLayer setPosition:CGPointMake(0,0)]; 

로드 할 게임 레이어를 말할 때마다 버튼을 선택할 때마다 올바른 레이어로 되돌릴 수 있습니다.

[loadLayer setPosition:CGPointMake(0,0)]; 
[settingsLayer setPosition:CGPointMake(-1000,-1000)]; 
[menuLayer setPosition:CGPointMake(-1000,-1000)];