0

CGRectIntersectsRect を使用して、2 つの CAlayer 間の衝突を検出しようとしています。1 つはレイヤーの階層の一部であり、もう 1 つはメイン ビューのサブレイヤーです。私はこれを試しました:

アニメーションのpresentationLayerにアクセスして衝突を検出する

一貫性がありません。これが私が今持っているものです。「LegLowerLeft」は CAlayers の階層の一部であり、「rec2」はメイン ビューのサブビューです。事前に助けてくれてありがとう.:

-(void) checkForCollisionWithRec{
  if(CGRectIntersectsRect(((CALayer*)self.creature.legLowerLeft.presentationLayer).frame,
                            ((CALayer*)rec2.presentationLayer).frame))

    { NSLog(@"Collision detected"); }

   else{NSLog(@"No collision detected");}
 }
4

1 に答える 1

3

レイヤーのフレームは、そのスーパービューの座標空間にあります。2 つのレイヤーのスーパービューが異なる場合、それらのフレームを直接比較することはできません。それらを一貫した座標空間に変換する必要があります。

CALayer *layer1 = self.creature.legLowerLeft.presentationLayer;
CALayer *layer2 = rec2.presentationLayer;

CGRect frame1 = layer1.frame;
CGRect frame2 = [layer1 convertRect:layer2.frame fromLayer:layer2];

if(CGRectIntersectsRect(frame1, frame2))
{
  NSLog(@"Collision detected");
}
else
{
  NSLog(@"No collision detected");
}
于 2013-03-30T14:47:43.033 に答える