как узнать сторону pygame.Rect, которая сталкивается с другим Rect?

avatar
윤석영
2 декабря 2020 в 04:31
151
1
1

Я использую pygame, python3.9, я хочу, чтобы возвращалась сторона (rect1), сталкивающаяся с rect2. Я уже пробовал это, но это не работает. Мне просто нужен внутренний модуль и pygame (извините за плохой английский)

def side(rect1, rect2):
    direction = ""
    if rect1.midtop[1] > rect2.midtop[1]:
        direction = "top"
    if rect1.midleft[0] > rect2.midleft[0]:
        direction = "left"
    if rect1.midright[0] < rect2.midright[0]:
        direction = "right"
    if rect1.midbottom[1] < rect2.midbottom[1]:
        direction = "bottom"
    return direction
Источник
TheLazyScripter
2 декабря 2020 в 04:39
0

Вам все еще нужно определить, действительно ли прямоугольники сталкиваются. Какой результат вы видели?

윤석영
2 декабря 2020 в 05:27
0

На самом деле сталкивается. Он просто возвращает неправильные значения. Я мог видеть это, уменьшая частоту кадров.

윤석영
2 декабря 2020 в 05:34
0

Я также использую pygame. рисовать

Ответы (1)

avatar
Rabbid76
2 декабря 2020 в 05:35
1

Сторона столкновения зависит от относительного направления движения. Сторона столкновения зависит от относительного движения rect1 и rect2.

В любом случае, вы можете оценить сторону, вычислив разницу в положении объекта и найдя сторону с минимальным расстоянием:

dr = abs(rect1.right - rect2.left)
dl = abs(rect1.left - rect2.right)
db = abs(rect1.bottom - rect2.top)
dt = abs(rect1.top - rect2.bottom)

if min(dl, dr) < min(dt, db):
    direction = "left" if dl < dr else "right"
else:
    direction = "bottom" if db < dt else "top"