iOS: ограничить CGRectIntersectsRect одним пересечением?

Я использую базовый CGRectIntersectsRect для обнаружения столкновения между спрайтами следующим образом:

if (CGRectIntersectsRect(staff.frame, imgView.frame)) {
    [self playSound];
}

Тем не менее, так как staff.frame движется последовательно по рамке imgView.frame, метод playSound срабатывает многократно - столько раз, сколько требуется, чтобы спрайты перекрывали друг друга - вызывая нежелательное и чрезмерное количество воспроизведения с playSound метод.

При этом возможно ли ограничить CGRectIntersectsRect способ разрешить только одно столкновение, прежде чем сломать обнаружение?

1 ответ

Что вы могли бы сделать, это объявить BOOL переменная экземпляра и использовать его для воспроизведения звука только один раз за столкновение. Ваш код будет примерно таким:

if (CGRectIntersectsRect(staff.frame, imgView.frame)) {
    if (!soundPlayed) {
        soundPlayed = YES;
        [self playSound];
    }
}
else {
    soundPlayed = NO;
}

Дайте мне знать, если это работает для вас.

Другие вопросы по тегам