1

一時停止メニューとして使用している CCLayer があります。画面全体を占有しますが、現在はタッチを通過させることができます。

タッチが透過しないようにしたいのですが、ちょっと困っています。ここに私が持っているものがあります:

-(id)init{
    if(self = [super init]){
        CGSize s = [[CCDirector sharedDirector] winSize];
        self = [CCLayerColor layerWithColor: ccc4(11, 153, 223, 255) width: s.width height: s.height];
        self.position = CGPointZero;
        self.isTouchEnabled = YES;
        [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];

    }
    return self;
}

ただし、レイヤーに触れるとクラッシュしますが、通過できるようです。

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Layer#ccTouchBegan override me'

タッチがこの cclayer を通過するのを防ぐ最も簡単な方法は何ですか? ありがとう

4

2 に答える 2

4

ターゲット タッチ デリゲートとしてレイヤーを追加したら、CCTargetedTouchDelegate メソッドを実装する必要があります。少なくとも

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

この方法は必須です。その他はオプションです。また、そのような方法でレイヤーをタッチ デリゲートとして追加するべきではありません。CCLayerクラスにメソッドあり

- (void) registerWithTouchDispatcher

それをオーバーライドして、そこに行を配置します

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

しばらくの間、このレイヤーを介してタッチを渡したい場合は、この行を書くだけです

[myLayer setIsTouchEnabled: NO];

または、いくつかの四角形でタッチをキャッチしたい場合は、ロジックをccTouchBegan:withEvent:メソッドに実装する必要があります。このメソッドが を返す場合NO、このタッチは他のタッチ デリゲートで処理できます。このメソッドが を返した場合YES、このタッチは他のタッチ デリゲートには配信されません。

于 2012-06-20T07:43:36.817 に答える
0

基本的に、cocos2d のすべてのレイヤーは 1 つの単一の UIView にあり、すべてのタッチはこのレイヤーではなく、この UIView によってキャッチされます。接触を防ぐために、デリゲートを から削除してみてください。CCTouchDicpatcherレイヤーのisTouchEnabledプロパティをに設定しNOます。

于 2012-06-20T07:36:23.943 に答える