столкновение спрайтов cocos2d.столкновение за кадр - PullRequest
0 голосов
/ 12 февраля 2012

хорошо, так что у меня сталкиваются два спрайта, 'player' и 'rock', это то, что я хочу, когда происходит столкновение, я хочу, чтобы (INT) жил с приращением +1, чтобы жить ++

однакоСтолкновение происходит в каждом кадре!так (int) число жизней равно числу свыше 100!

как я могу увеличить (int) жизни на +1 каждый раз, когда сталкиваются спрайты?не в каждом кадре они сталкиваются?

вот код, который я использовал

- (void)update:(ccTime)dt {
    [livesLabel setString:[NSString stringWithFormat:@"%i", lives]];

    CGRect playerRect = CGRectMake(
                                   player.position.x - (player.contentSize.width), 
                                   player.position.y - (player.contentSize.height), 
                                   player.contentSize.width, 
                                   player.contentSize.height);

    for (CCSprite *rock in rockArray) 
    {
        CGRect rockRect = CGRectMake(
                                   rock.position.x - (rock.contentSize.width), 
                                   rock.position.y - (rock.contentSize.height), 
                                   rock.contentSize.width, 
                                   rock.contentSize.height);

        if (CGRectIntersectsRect(playerRect, rockRect)) 
        {
            lives++;  
        }                       
    }
}

вышеупомянутый код, когда «рок» и игрок сталкиваются, жизни увеличиваются на 1

Ответы [ 2 ]

1 голос
/ 12 февраля 2012

Если вы хотите реализовать какое-то базовое обнаружение столкновений в таком случае, как ваш, вам следует управлять списком всех пар, которые столкнулись;когда сталкиваются два спрайта, вы добавляете их в список, только если их там еще нет.

Также посмотрите на этот пост Рэя Вендерлиха , хотя представленный случай не аналогиченyours.

Другой подход - использование бурундука или Box2D только для обнаружения столкновений.Опять же, вы можете найти учебник о последнем на RW сайте .

0 голосов
/ 13 февраля 2012

Звучит так, как будто вы хотите, чтобы lives увеличивался, но затем прекращал увеличиваться, пока спрайты не перестали сталкиваться и больше не сталкивались, затем они снова сталкивались и жизни снова увеличивались.

Так что просто добавьте переменную, чтобы при увеличении числа жизней у вас была включена BOOL; добавьте эту BOOL в ваше состояние if, чтобы жизнь не увеличивалась, если bool не выключен. Выключите bool с помощью другого теста, который определяет, когда они не пересекаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...