2011-01-03 7 views
0

iOS向けにcocos2dを使用してゲームを作っています。メインのゲームプレイレイヤーコンストラクターが呼び出されると、次の呼び出しでタッチを受け取るように登録されます。メニューレイヤがポップされた後にcocos2dレイヤーがタッチに反応しない

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

これは問題ありません。ユーザーがゲームを一時停止すると、私はCCDirectorにポーズメニューレイヤをプッシュします。ポーズメニューレイヤーは、上記と同じ方法でタッチを受信するように登録します。そのメニューの第1の選択肢は、ゲームを再開する(すなわち、メニュー層をポップし、進行中のゲームに戻る)ことである。しかし、これが起こると、ゲームプレイ層はタッチに反応しなくなります。

これを処理する最善の方法は何ですか?私は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

関連する問題