碰撞计数器的问题

时间:2011-07-23 11:13:10

标签: iphone xcode uiimageview collision-detection counter

这是我的代码:

-(void)detectCollision{

  imageView.center = CGPointMake(imageView.center.x + X, imageView.center.y + Y);


    if(CGRectIntersectsRect(imageView.frame,centre.frame)){


    label.text= [NSString stringWithFormat:@"%d", count];
  ++count;
}

我在detectCollision上有一个CADisplayLink(60fps)。 我希望每次“imageView”与“center”碰撞时增加一个“count”,但我的问题是计数增量太快,每次碰撞时它增加近100或200,我不知道为什么。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

找出碰撞你应该使用边界而不是框架

bounds - 对象内部的大小

frame - 从superview x,y + size(bounds)偏移

这里我假设你处于肖像模式

-(void)detectCollision{

        if(CGRectContainsPoint( imageView.bounds, CGPointMake(160, 240)) ){


                label.text= [NSString stringWithFormat:@"%d", count];

                ++count;

        }


    }

答案 1 :(得分:0)

因为每次帧开始相交时,

if(CGRectIntersectsRect(imageView.frame,centre.frame))

您的情况将成立,直到帧分离并且CADisplayLink中的计数增加超过100

因此您可以使用BOOL并在帧首次相交时将其设置为true。然后检查它们是否分开并使BOOL恢复为假。

在init中将BOOL intersectFlag初始化为false。我假设帧最初不会相交。

-(void)detectCollision
{ 
    imageView.center = CGPointMake(imageView.center.x + X, imageView.center.y + Y);

    if(!intersectFlag)
    {    
        if(CGRectIntersectsRect(imageView.frame,centre.frame))    
        {
            intersectFlag = YES;         
            label.text= [NSString stringWithFormat:@"%d", count];
            ++count;
        }
    }
    else
    {
        if(!CGRectIntersectsRect(imageView.frame,centre.frame))
        {
            intersectFlag = NO;
        }
    }
}