0

2 つのスプライトがあり、1 つは CCSpriteBatchNode の子として追加され、もう 1 つは CCParallaxNode の子として追加されます。それらの衝突を検出する方法はありますか? 次のコードを使用しました。

 -(void)CheckCollition:(CCSprite *)Opp_Obs Opponent:(CCSprite *) H_man
{
  // NSLog(@"inside check collision");
CGRect b_rect=[Opp_Obs boundingBox];
CGPoint p_position=[H_man position];

if (CGRectContainsPoint(b_rect,p_position))
{    
    NSLog(@"collision with opponent");


    // Zoom Animation with Points
    CCScaleBy *zzomscal=[CCScaleTo actionWithDuration:.2 scale:.12];
    CCRotateTo * rotLeft = [CCRotateBy actionWithDuration:0.2 angle:360];
    CCCallFunc *ccfun=[CCCallFunc actionWithTarget:self selector:@selector(zoomComplete)];
    CCSequence * zzomseq = [CCSequence actions:zzomscal,rotLeft,ccfun, nil];
    [H_man runAction:zzomseq];
}
else
{
    NSLog(@"no collision");
}


}

しかし、ここではコントロールがループに入ることはありません。他の解決策はありますか?誰でも私を助けてください。

4

1 に答える 1

0

ブレークポイントを設定し、rect と position の値を比較します。そのうちの 1 つはゼロであるか、かなり離れている可能性があります。

後者の場合、それらを比較するために、最初に bbox の原点と位置をワールド座標に変換する必要があるかもしれません。これは、スプライトの親も移動している場合です (親の位置 != 0,0)。

于 2012-09-21T07:48:13.070 に答える