1

私は自分のレイヤーでタッチを有効に設定しています:

[[[CCDirector sharedDirector]touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];

後でタッチを無効にしたい場合: self.isTouchEnabled=NO;動作していません。私がそれを無効にしようとしている場合:

[[[CCDirector sharedDirector]touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:NO];

大丈夫ですが、同じ構文で再度有効にすると、デリゲートが既に追加されているというクラッシュが発生します...

タッチを動的に無効化および有効化するにはどうすればよいですか??

ありがとう 。

4

2 に答える 2

0

それが実際にCCLayerオブジェクトである場合は、isTouchEnabledを使用してください。CCLayerオブジェクトは、それに応じてターゲットタッチデリゲートとして自身を追加/削除します。したがって、全体の質問は、「機能していない」とはどういう意味ですか。たとえば、レイヤー(タッチが無効になっている)にメニューが含まれている場合、メニューは引き続きアクティブであり、タッチの優先度が非常に高くなります。つまり、タッチに応答するのはレイヤーではなく、埋め込まれたメニューです。

CCLayerのコード(バージョン2.0)から直接:

-(void) setIsTouchEnabled:(BOOL)enabled
{
    if( isTouchEnabled_ != enabled ) {
        isTouchEnabled_ = enabled;
        if( isRunning_ ) {
            if( enabled )
                [self registerWithTouchDispatcher];
            else {
                CCDirector *director = [CCDirector sharedDirector];
                [[director touchDispatcher] removeDelegate:self];
            }
        }
    }
}

-(void) registerWithTouchDispatcher
{
    CCDirector *director = [CCDirector sharedDirector];
    [[director touchDispatcher] addStandardDelegate:self priority:0];
}

ご覧のとおり、基本的なCCLayerコードは、手動で実行しようとしていることをすでに実装しています。プロパティを使用するだけです。

于 2013-02-28T14:37:39.940 に答える
0

cc タッチ ディスパッチャーと self.istouchenabled は、タッチを検出する 2 つの別々の方法です。私は今、コンピューターの前にいないので、正確なコードを思い出せません。国際線に搭乗するところなので、1 日ほど待っていただければ、cctouch ディスパッチャーを削除する正しい方法でこれを更新します。待ちたくない場合は、cocos2d のドキュメントを確認することをお勧めします。私はそれがそこにあなたを示していると確信しています

于 2013-02-28T15:11:57.203 に答える