2011-10-14 2 views
1

장면 전환에 영향을받지 않는 Cocos2d에 글로벌 레이어를 추가 할 수 있습니까?Cocos2d에서 장면 전환에 영향을받지 않는 글로벌 CCLayer를 추가하는 방법은 무엇입니까?

제가 알 수있는 것처럼, 그것은 모든 장면 계층 위에 있어야합니다.

는적인 Cocos2D 포럼에서 오래된 짧은 토론이있다, 그러나 아무 대답이 없다 : http://www.cocos2d-iphone.org/forum/topic/8071

UPD는. '장면 전환에 의해'나는 '님의 동영상에 의한 장면 전환'을 의미합니다.

답변

1

내 직감은 아니요입니다. 내 뇌는 일 수도 있고이라고 말합니다.

설명서에 "모든 노드의 부모로 CCScene을 사용하는 것이 좋습니다."라는 문구가 나와 있습니다.

지금은 테스트 할 수 없지만 CCNode의 상속 다이어그램을 보면 논리가 CCNode이고 CCScene은 앵커 포인트 만 다릅니다. 따라서 루트 레이어로 사용할 CCLayer을 만들고 두 개의 자식을 추가 할 수 있습니다. 즉, GUI에 대해 루트 CCSceneCCLayer (상위 Z 순서가 있음)을 추가 할 수 있습니다.

그러나 장면 전환은 여전히 ​​루트 장면에서 작동하는 CCDirector replaceScene으로 전화를 걸기 때문에 까다로울 수 있습니다. 루트 CCLayerCCScene 하위를 제공하는 경우 CCLayer 및 해당 GUI 하위를 그릴 수 없습니다. 루트 CCLayer을 주면 이전과 같은 상황이됩니다.

나는 여전히 시도해 볼 것입니다.

1

CCLayer 하위 클래스를 만들어 싱글 톤으로 설정할 수 있습니다. 다른 자식 노드와 마찬가지로 장면에 추가합니다.

한 장면에서 다른 장면으로 전환 할 때마다 이전 장면에서 레이어를 제거하고이를 새로운 장면으로 추가 할 수 있습니다. 장면 전환 애니메이션을 사용하지 않는 경우에만 작동합니다.

대체 방법은 CCDirector replaceScene 메서드를 사용하지 않고 변경하지 않는 단일 장면으로 실행되도록 응용 프로그램을 설계하는 것입니다. 장면을 변경하는 것을 "속일"려면 두 개의 레이어, 즉 하나의 전역 레이어와 현재 장면 노드가 포함 된 다른 레이어를 사용합니다. 전환하려는 경우 CCActions를 사용하여 레이어에 애니메이션 효과를 적용 할 수 있습니다. 예를 들어 다른 노드 계층 구조로 새 레이어를 슬라이드하면서 화면 밖으로 밀어 낼 수 있습니다. 정말로 잃는 것은 장면 변경을 애니메이션화하는 CCSceneTransition 클래스의 편리 성입니다.

+0

감사합니다. 나는 그렇게 생각했다. 그러나 필자의 필요에 따라 CCDirector 클래스를 패치하기 전에 정확히 지적 할 필요가있다. :) – rudyryk

3

CCDirector의 notificationNode 속성을 사용하면 전환 중에도 장면 위에 남아있는 CCNode (ie.CCLayer, CCLabel 등)를 배치 할 수 있습니다. 이런 식으로 뭔가 :

CCLayer *layer = [CCLayer node]; 
CCLabelTTF *label = [CCLabelTTF labelWithString:@"Test" fontName:@"Marker Felt" fontSize:32]; 
[layer addChild:label]; 
[[CCDirector sharedDirector] setNotificationNode:layer]; // Layer should be placed here 
[layer onEnter]; // Schedule for updates (ie. so that CCActions will work) 

그것은 (등 광고) 알림 목적으로 의미가 있어요 그래서이 노드에서 너무 멋진 어떤 일을하려고 제안하지 않을 것입니다.

관련 문제