0

メインシーンがあり、その上に新しいレイヤーを設定しCCLayerます。このレイヤーにはボタンがあります。しかし、そのボタン ( CCMenu) を押すと、その後ろのレイヤーもタッチして処理を行います。

その下のレイヤーではなく、上のレイヤーのタッチのみを有効にしたい。どうやってやるの ?(タッチ優先の設定方法は?)

編集:

私のレイヤーはそのようなものです:

-(CCLayer*)showHelpLayer
{

    self.isTouchEnabled=YES;
    [[CCDirector sharedDirector].touchDispatcher addTargetedDelegate:self priority:-256 swallowsTouches:YES];
...
...

     [self addChild:menu];
    [menu setHandlerPriority:-257];
    return self;
}

そして、私はそれをそのようにメインシーンに追加しています:

    helpLayer *hlp=[[helpLayer alloc]init];
    [hlp showHelpLayer];
    [self addChild:hlp z:100];
4

1 に答える 1

1

優先順位をいじることはできますが、厄介なことになります。私はそれを非常に具体的で、十分に封じ込められた状況でのみ行います。最善の方法は、新しいレイヤーとコントロール オブジェクトをプッシュする前に、「シーンの下」での入力を無効にすることです。

優先順位で遊ぶことを選択した場合、すべてのメニューがデフォルトでこの優先順位になることを覚えておいてください (cocos2D 2.xx):

kCCMenuHandlerPriority = -128,

したがって、優先順位を付けてプレイする場合は、レイヤーを-256(飲み込むタッチ)に配置し、メニューのsetHandlerPriorityを-257に設定します。そのため、メニューを通り抜けたものはすべてレイヤーに捕捉され、飲み込まれます (つまり、「下」には渡されません)。

優先アプローチの例。フライスルー メニューは CCNode を拡張するクラスであり、init メソッドですべてのメニュー オブジェクトを作成した後、onEnter でこれを行います。

- (void)onEnter {

    [super onEnter];

    MPLOGDEBUG(@"");
    [[CCDirector sharedDirector].touchDispatcher addTargetedDelegate:self priority:-256 swallowsTouches:YES];
    [_backMenu setHandlerPriority:-257];
    [_toggleOptionsMenu setHandlerPriority:-257];
    [_dialogMenu setHandlerPriority:-257];
    [_labelMenu setHandlerPriority:-257];
}
于 2013-06-17T12:32:53.090 に答える