Здесь вы задаете несколько разных вопросов. Я отвечу здесь на то, что, как мне кажется, вы пытаетесь спросить: Есть ли способ проверить, пересек ли границу весь спрайт, а не только верхний левый угол? . Итак, мой ответ (обратите внимание, это будет работать только в том случае, если ваша граничная линия линейна): вам нужно проверить каждый из углов по отдельности, затем, если все они вернули True
, вы двигаетесь дальше. Пример:
def collision(sprite1, boundary):
def internal_collision(point, boundary):
... # The actual math happens here, returns True/False
corners = []
for h in [0, 1]:
for j in [0, 1]:
corners.append([sprite1.rect.x+(h*sprite1.rect.width),
sprite1.rect.y+(j*sprite1.rect.height)])
corner_check = []
for corner in corners:
corner_check.append(internal_collision(corner, boundary))
return all(corner_check)
Я не знаю, как работает ваш код, поэтому я постарался сделать его максимально гибким и понятным, чтобы вы могли повторно реализовать его в своем собственном коде.