Как предотвратить нажатие в области на экране - PullRequest
0 голосов
/ 20 февраля 2012

Я разработал приложение, в котором пользователь стучит по мячу столько раз, сколько может в течение 30 секунд, под названием iTapping. В игре пользователь может нажать в любом месте экрана, чтобы попасть в мяч. Я думал о том, чтобы отредактировать приложение так, чтобы в нем были «мертвые точки», где пользователь не мог бы нажать на мяч. Например, если мяч находится в верхнем правом углу (скажем, в области около 100 кв. Пунктов), и пользователь нажимает на мяч, ничего не происходит. Как бы я это закодировал? Пожалуйста, дайте мне знать, если это не достаточно ясно.

Вот файл .m:

CGPoint Destination;
CGFloat xamt, yamt; 
CGFloat speed21 = 40;
CGFloat xMin21 = 24;
CGFloat xMax21 = 297;
CGFloat yMin21 = 74;
CGFloat yMax21 = 454;

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:self.view]; 
if ([self Intersecting:location :Ball]) {
    number21++;

    int xRange = xMax21 - xMin21;
    int yRange = yMax21 - yMin21;

    int xRand = (arc4random() % xRange) + xMin21;
    int yRand = (arc4random() % yRange) + yMin21;

    Destination = CGPointMake(xRand, yRand);
    xamt = ((Destination.x - Ball.center.x) / speed21);
    yamt = ((Destination.y - Ball.center.y) / speed21);


    if (number21 == 65) { 
        [timer invalidate];
      }
   }
}   

-(BOOL)Intersecting:(CGPoint)loctouch:(UIImageView *)enemyimg {
    CGFloat x1 = loctouch.x;
    CGFloat y1 = loctouch.y;

    CGFloat x2 = enemyimg.frame.origin.x;
    CGFloat y2 = enemyimg.frame.origin.y;
    CGFloat w2 = enemyimg.frame.size.width;
    CGFloat h2 = enemyimg.frame.size.height;

    if ((x1>x2)&&(x1<x2+w2)&&(y1>y2)&&(y1<y2+h2))
        return YES;
    else
        return NO;
}

1 Ответ

2 голосов
/ 20 февраля 2012

Предлагаю вернуть сенсорное управление обратно к самому мячу (см. этот ответ ).Таким образом, всякий раз, когда получено касание, вы можете быть уверены, что оно щелкает по мячу.Все, что вам нужно сделать, это проверить, находится ли мяч в настоящее время в мертвой зоне, поэтому игнорируйте касание.

...