2013-02-06 5 views
0

내 Cocos2d 2.0 iOS 게임에서 CCMenuAdvanced를 사용하여 스크롤 메뉴를 만듭니다. 문제는 메뉴의 보이지 않는 부분도 다루는 것 같다는 것입니다.CCMenuAdvanced가 위에 스프라이트가있을 때도 클릭됩니다.

// background is full screen, with all pixels transparent 
// except the part where menu shows 
CCSprite *menuBackground = [CCSprite spriteWithFile:@"scrollingmenubackground.png"]; 
//... 
[self addChild:menuBackground]; 
//...  
//create menu items 
CCMenuAdvanced *settingsMenu = [CCMenuAdvanced menuWithItems:item1, item2, item3, nil]; 
//... 
[menuBackground addChild:settingsMenu]; 

// foreground is full screen, with an image  
// with a transparent hole where the menu shows 
CCSprite *foreground = [CCSprite spriteWithFile:@"scrollingmenuforeground.png"];  
[menuBackground addChild:foreground]; 
//... 

지금이 잘 작동하고, 메뉴가 표시가 올바르게 잘립니다와 접촉을 처리한다 : 여기

은 (boundaryRect 작물 제대로 표시하고 얻을 필요) 코드입니다. 그러나 문제는 내가 볼 수있는 메뉴 아래를 클릭 할 때, 그 앞에 불투명 한 픽셀이있는 스프라이트 ( foreground)가 있더라도 메뉴의 터치를 여전히 처리한다는 것입니다.

포어 그라운드를 메뉴보다 높은 zorder로 설정하여 zorder를 부지런히 시도했지만 아무 것도 변경하지 않는 것 같습니다.

menuBackground.zOrder = 1; 
    settingsMenu.zOrder = 2; 
    foreground.zOrder = 3; 

는 또한 INT_MIN뿐만 아니라 kCCMenuHandlerPriority - 1,하지만 효과 메뉴의 우선 순위를 설정했습니다.

사용자가 볼 수있는 부분 만 메뉴가 응답하도록하려면 어떻게합니까? 아난드

+0

무엇이 질문입니까? 이것은 나에게 버그 리포트/기능 요청과 비슷하게 들린다. 그것이 CCMenu와 CCMenuAdvanced가 작동하는 방법입니다. 그리고 zOrder는 입력과 관련이 없습니다. – LearnCocos2D

+0

CCMenuAdvanced가 전경 (여기서는 경계 rect 내에서만 있음)에있는 곳에서만 클릭에 응답하려고합니다. 위의 스프라이트가있는 스크롤 아웃 된 부분에서는 클릭에 응답해서는 안됩니다. 어떻게해야합니까? – Anand

답변

1

효과적인 '마스크'를 가지고

감사합니다, 당신은 전경으로 활성화 터치 레이어를 사용해야합니다. 그 레이어에서 메뉴 밖에서 터치를 수락하고 아무 것도하지 않고 마스크 안쪽으로 건 드리면됩니다. 그러나 이것은 문제를 일으킬 것입니다. 마스크 안의 touchBegan이 사용자의 손가락을 밖으로 드래그하면 메뉴는 계속 스크롤됩니다. CCAdvancedMenu를 하위 클래스로 분류하여 자신 만의 터치 프로세싱 요구 사항을 구현하거나 자체적 인 버전을 생성 할 수 있습니다. 게임 디자이너가 다른 많은 기능을 원했고 서브 클래 싱이 도움이 아닌 방해가되어서 후자 작업을 마쳤습니다. BTW는 터치 처리를 위해 zOrder에 의존하지 않으며 관련이 없습니다.

또한 '터치 마스크'접근법은 나중에 다시 나타날 것이며 (예를 들어 터치가 필요한 스크롤 메뉴 옆에 다른 객체를 추가하면 터치가 마스크 처리됩니다), 가장 좋을 것입니다 터치 관련 요구 사항 구현과 관련된 모든 객체가 자체 구현을 캡슐화하는 경우

+0

감사합니다. 메뉴가 포함 된 배경 레이어 위에있는 터치를 처리하거나 거부하는 터치 지원 레이어를 추가했습니다. 그것은 현재 작동합니다 ... – Anand