Pygame - определяет, какая сторона прямоугольника столкнулась с какой стороной другого - PullRequest
0 голосов
/ 31 января 2019

Привет всем! Я создаю игру-клон Super Mario Bros с Python и Pygame, и я написал функцию, которая возвращает True, если два прямоугольника сталкиваются, и False в противном случае.Так что я знаю, как определить, когда Марио сталкивается с монстром.Теперь я хочу знать, перепрыгнул ли Марио через монстра или, другими словами, его прямоугольник столкнулся с верхней стороной прямоугольника монстра.Как я могу это сделать?Вот мой код:

Функция обнаружения столкновения двух прямоугольников:

def is_colliding(x, y, w, h, x2, y2, w2, h2):
    if x < x2 + w2 and x + w > x2 and y < y2 + h2 and h + y > y2:
        return True
    return False

Фактическая проверка этого в основном игровом цикле:

while True:
    # other stuff
    if is_colliding(mario.x, mario.y, mario.w, mario.h, goomba1.x, goomba1.y, goomba1.w, goomba1.h):
        goomba1.wounded()

Любая помощь приветствуется.Спасибо.

1 Ответ

0 голосов
/ 31 января 2019

Единственный способ решить эту проблему - вычислить «направление движения». Например, вы можете сохранить координату предыдущего шага, и если на текущем шаге is_colliding вернет True, и mario на предыдущем шаге находился под монстром, а в предыдущемstep is_colliding вернул False, чем вы можете решить, что Марио упал сверху.

# x1,y1,h1,w1 - mario params
# x2,y2,h2,w2 - monster params
# y1_prev - mario previous param
# y2_prev - monster prevoius param
# collide_prev - previous sollision check

def check_above(x1, y1, w1, h1, x2, y2, w2, h2, y1_prev, y2_prev, collide_prev):
    collide = is_colliding(x1, y1, w1, h1, x2, y2, w2, h2)
    if collide and y2_prev + h2 < y1_prev and not collide_prev:
        return True
    else:
        return False 

Логика проста, если на текущем шаге Марио сталкивается, а на предыдущем не было столкновения, и Марио находился над монстром, то это означает, что Марио сталкивается сверху.

NOTE Код будет работать, если координата x находится в левом нижнем углу прямоугольника

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