2013-05-22 2 views
1

Хорошо, я делаю 2D-скроллер с pygame, но хочу иметь возможность контролировать, когда учитывать конфликты. Например, после того, как мой игрок сталкивается и умирает, он мгновенно появляется в середине экрана, проблема в том, что рядом с ним часто возникает другой объект столкновения, который мгновенно убивает игрока. То, что я хочу, - это небольшой период времени, в течение которого игрок погружен в столкновение, позволяя ему сначала уйти в безопасное место, а затем продолжить обычное воспроизведение. Я думал, что, возможно, разместил респауны в группе фиктивных спрайтов, а затем со временем удалит их и добавит в другую группу с коллизиями. Я действительно не знаю.Pygame: Как игнорировать столкновения

ответ

0

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

def kill_player(player): 
    # handle moving the player after death, anything else you need to do 
    # set player invulnerability to 30 frames 
    player_invulnerable_frames = 30 

if environment_rect.collides(player_rect) and player_invulnerable_frames = 0: 
    # perform collision response stuff here 

В вашем игровом цикле, или, возможно, функция обновления, вы можете уменьшить количество кадров неуязвимости, если она в настоящее время больше нуля

while(running): 
    # your game loop stuff 
    if player_invulnerable_frames > 0: 
     player_invulnerable_frames -= 1 
+0

Благодаря Хас, Логика работала. Я поместил все в свой основной() как своего единственного игрока, и все мои столкновения тоже внутри. Я пытался работать, поэтому каждый экземпляр игрока имел свою неуязвимую ценность, но я не мог заставить его работать, когда звонил, чтобы узнать, что это за значение, когда игрок находился внутри спрайта с моей основной(). В любом случае, спасибо за это! – Aikman007

+0

Отлично! Если решение сработало для вас, можете ли вы пометить ответ как принятый? – Haz