私はいくつかの小さな CCLayer を持つフル キャンバス CCLayer を持っています - それらはボタンです。ボタンでタッチリスナーを有効にしました:
- (id)init {
if ((self = [super init])) {
[self setTouchEnabled:YES];
}
return self;
}
最初に、デフォルトのタッチ ハンドラを試しました。
- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"This is me: %d", self->button_id);
}
奇妙な結果は、何も呼び出されるべきではないクリーンエリアに触れたとしても、どこに触れても常にすべてのボタンタッチハンドラーをトリガーすることです。
私はドキュメントとブログを読んでいましたが、まっすぐな解決策のようには思えませんでした。以下を追加して、シングルタッチハンドラーも試しました。
- (void)onEnterTransitionDidFinish {
[CCDirector sharedDirector].touchDispatcher addTargetedDelegate:self priority:1 swallowsTouches:YES];
}
- (void)onExit {
[[CCDirector sharedDirector].touchDispatcher removeDelegate:self];
}
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
NSLog(@"This is me: %d", self->button_id);
}
この場合の唯一の違いは、トリガーされたリスナーが 1 つだけだったことです。常に、最後に定義したリスナーがトリガーされます。また、タッチが発生した場所に関係なく。
問題はイベントの委譲ではなく、CCLayer の境界にあるように思えます。これは私がサイズを設定する方法です:
self.contentSize = CGSizeMake(10.0f, 10.0f);
私が間違っていたアイデアはありますか?たぶん、私は本質的な何かを見逃しました。
ありがとうございました!