2011-12-21 4 views
0

私はseveralsレイヤーを持ち、いくつかのスプライトを追加しました。 はこの方法でそれらをアクセスもしようとすると:視差付きのcocos2dタッチ

-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    return YES; 
} 

私は、画面をタッチすると私のアプリがクラッシュ:

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    CGPoint location = [touch locationInView:[touch view]]; 
    location = [[CCDirector sharedDirector] convertToGL:location]; 

    if(CGRectContainsPoint([[self getChildByTag:tagNumber] boundingBox], location)) { 
     CCLOG(@"You've touched the sprite!"); 
    } 
} 

奇妙なことは、このメソッドを持っていない場合ということです。どのようなアイデアかもしれない?

UPDATE:

-(void) registerWithTouchDispatcher 
{ 
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self 
                priority:0 swallowsTouches:YES]; 
} 

答えて

1

ccTouchBeganイベントは受信しましたが、ccTouchesBeganは受信していない場合は、CCTargetedTouchDelegateプロトコルを使用しています。 CCTouchDispatcher addTargetedDelegateでクラスを登録している可能性があります。そのため、メソッドがccTouchXXXXではなくccTouchesXXXXではなく、CCTargetedTouchDelegateプロトコルを使用する必要があります。

また、Xcodeに警告が表示されます。 ccTouchBeganを実装していない場合は、「セレクタに応答しない可能性があります」という警告が表示されることがあります。すべての警告は深刻なものにする必要があります(実際には「すべての警告をエラーとして処理する」を有効にすることを推奨します)。

0

コンソールで生産されたエラー?認識できないセレクタについて何か?私がcocos2Dに関わって以来、しばらく経っていますが、2番目のメソッドが最初のメソッドをオーバーライドするかどうかを確認する必要があります。実際には、それが存在しないときは、プログラムは最初のもの(voidを返すもの)を使用します。そのため、コード実装の実際のバグに遭遇します。私はブレークポイントを ' - (void)ccTouchesBegan :(NSSet *)touches withEvent:(UIEvent *)event'の最初の行の中に設定し、BOOLを返す関数を削除して、デバッガを使用します。

コンソールログを投稿してください。私はあなたが "セレクターが見つかりません"、 "子が見つかりません"または "nil引数のために無効な引数例外"の問題があると信じています。

単なる考えです。

+0

[ここに私のログ](http://pastie.org/private/qndnex0pgflefwhfuxlxpw);あなたが私に言ったことを試して、私の 'ccTouchesBegan'メソッドは呼び出されません –