Проблема со счетчиком столкновений - PullRequest
0 голосов
/ 23 июля 2011

Вот мой код:

-(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;
}

У меня есть CADisplayLink (60 кадров в секунду) при обнаружении конфликтов. Я хочу увеличивать «count» на единицу каждый раз, когда «imageView» сталкивается с «center», но моя проблема в том, что приращение подсчета происходит слишком быстро, каждый раз, когда происходит столкновение, его приращение составляет около 100 или 200, я не знаю, почему , Как я могу решить это?

Ответы [ 2 ]

0 голосов
/ 23 июля 2011

Это потому, что каждый раз, когда кадры начинают пересекаться,

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

ваше состояние будет истинным, пока кадры не разделятся и число не увеличится более чем в 100 в CADisplayLink

, чтобы вы могли использовать BOOL и установить его в значение true, когда кадры впервые пересекаются. затем проверьте, не разделены ли они, и верните BOOL обратно в false.

инициализировать BOOL intersectFlag в false в init. Я предполагаю, что кадры изначально не пересекаются.

-(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;
        }
    }
}
0 голосов
/ 23 июля 2011

чтобы узнать столкновение, которое вы должны использовать с границами, а не с рамкой

границы - размер внутри объекта

frame - смещение от суперпредставления x, y + size (bounds)

здесь я предполагаю, что вы находитесь в портретном режиме

-(void)detectCollision{

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


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

                ++count;

        }


    }
...