2011-01-03 7 views
0

iOS 용 cocos2d를 사용하여 게임을 만들고 있습니다. 메인 게임 플레이 레이어 생성자가 호출되면 다음 호출로 터치를 받도록 등록합니다.메뉴 레이어가 팝업 된 후 cocos2d 레이어가 터치에 응답하지 않습니다.

[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self 
                priority:0 
               swallowsTouches:YES]; 

잘 작동합니다. 사용자가 게임을 일시 중지하면 CCDirector에 일시 중지 메뉴 레이어를 푸시합니다. 일시 중지 메뉴 계층은 위와 같은 방식으로 터치를 수신하도록 등록합니다. 이 메뉴의 첫 번째 옵션은 게임을 다시 시작하는 것입니다 (즉, 메뉴 레이어를 팝하고 진행중인 게임으로 돌아 가기). 그러나 이런 일이 발생하면 게임 플레이 레이어가 더 이상 터치에 반응하지 않습니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? Update에 대한 모든 호출에서 게임 플레이어 계층을 대상 대표로 등록 할 수 있다고 생각합니다.하지만 그것은 어리석은 것 같습니다. 대리자를 닫기 전에 일시 중지 메뉴에서 대리자를 다시 할당 할 수 있나요? 이 작업을 수행하는 허용 된 방법이 있습니까?

답변

1

튀어 나온 장면에서 돌아올 때 CCLayer 개체에서 포커스를 훔치는 것으로 알려진 CCMenu의 알려진 문제가 있습니다. 내가 cocos2d 포럼에서 찾은 것처럼이 문제를 해결할 수있는 방법은 새 장면을 만드는 대신 투명 레이어 (기존 장면을 흐리게 표시)에 CCMenu으로 오버레이하는 것입니다. 이 CCMenu으로 끝나면 간단히 장면에서 제거하면됩니다.

-(void)pauseMenuButtonPressed 
{  
    if(!paused) 
    { 
     paused = TRUE; 

     [[CCDirector sharedDirector] pause]; 

     CGSize s = [[CCDirector sharedDirector] winSize]; 
     pauseLayer = [CCColorLayer layerWithColor: ccc4(150, 150, 150, 125) width: s.width height: s.height]; 
     pauseLayer.position = CGPointZero; 
     [self addChild: pauseLayer z:8]; 

     CCMenuItem *pauseMenuItemResume =[CCMenuItemImage itemFromNormalImage:@"menuItemResumeSmall.png" 
                   selectedImage: @"menuItemResumeSmallSelected.png" 
                     target:self 
                    selector:@selector(pauseMenuResumeSelected)]; 


     CCMenuItem *pauseMenuItemMainMenu =[CCMenuItemImage itemFromNormalImage:@"menuItemMainMenuSmall.png" 
                   selectedImage: @"menuItemMainMenuSmallSelected.png" 
                     target:self 
                    selector:@selector(pauseMenuExitToMainMenuSelected)]; 

     // Create the pause menu and add the menu items to it 
     pauseMenu = [CCMenu menuWithItems:pauseMenuItemResume, pauseMenuItemMainMenu, nil]; 

     // Arrange the menu items vertically 
     [pauseMenu alignItemsVertically]; 

     // add the menu to the scene 
     [self addChild:pauseMenu z:10]; 

     [hudButtons setIsTouchEnabled:NO]; 
    } 

} 

-(void)pauseMenuResumeSelected 
{ 
    [self removeChild:pauseMenu cleanup:YES]; 
    [self removeChild:pauseLayer cleanup:YES]; 
    [hudButtons setIsTouchEnabled:YES]; 
    [[CCDirector sharedDirector] resume]; 
    paused = FALSE; 
} 
0

일시 중지 메뉴 개체를 해제해도 작동하지 않습니까? 또는 일시 중지 레이어가 활성화되어 있지 않을 때 화면 밖으로 이동할 수 있습니다. x, y를 -1000 등으로 설정하십시오.

+0

불행하게도,이 일시 정지 메뉴 장면이 터진 후 무슨 일이 일어나고 :

여기 내 특정 구현입니다. 이것은 객체를 해제합니다. – jonmorgan

관련 문제