Найти расстояние между объектами в python - не работает - PullRequest
1 голос
/ 05 апреля 2020

Я сейчас работаю над простой игрой flappy bird-i sh на Python. По какой-то причине код столкновения не работает, когда труба и птица касаются.

def collision():
    global distanceDown, distanceUp
    distanceUp = math.sqrt(math.pow(pipeUpX - birdX, 2) + math.pow(pipeUpY - birdY, 2))  # distance formula
    distanceDown = math.sqrt(math.pow(pipeDownX - birdX, 2) + math.pow(pipeDownX - birdY, 2))

    if distanceUp <= 20 or distanceDown <= 20:
        return True
    else:
        return False

Я вызвал функцию в основной игре l oop и попросил python завершить игру если это правда, но птица просто проходит через трубу. К вашему сведению, я не использовал OOP и классы. Вот значения ..

pipeWidth = 50
pipeHeight = 130
pipeUpX = 800
pipeUpY = 0
pipeDownY = screenY - pipeHeight
pipeDownX = 900
pipeX_change = 1

Кроме того, я совсем новичок в python и программирование в целом, поэтому, пожалуйста, ответьте в понятном коде. Спасибо:)

1 Ответ

0 голосов
/ 06 апреля 2020

Код не проверяет расстояние до трубы. Код проверяет расстояние до начала и конца трубы. Это что-то другое.

Поскольку ваши объекты просто прямоугольники, я рекомендую использовать pygame.Rect objeccts и метод colliderect. Например, некоторый псевдокод:

def collision():  
    pipeRect = pygame.Rect(pipeLeft, pipeTop, pipeWidth, pipeHeight) 
    birdRect = pygame.Rect(birdLeft, birdTop, birdWidth, birdHeight) 
    return pipeRect.colliderect(birdRect)

Для коллизии «изображений» я рекомендую использовать pygame.sprite.Sprite / pygame.sprite.collide_mask() соответственно pygame.mask.Mask / pygame.mask.Mask.overlap().

См. Далее:
Столкновение масок в пигаме
Как создать маску столкновения?
Пигамей маска столкновения

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