Ошибка при движении по диагонали и обработке столкновений в pygame.Python

Программы на Python
Anonymous
Ошибка при движении по диагонали и обработке столкновений в pygame.

Сообщение Anonymous »

У меня есть настройка обнаружения столкновений, и она работает нормально. Столкновение обнаруживается и разрешается правильно, ЕСЛИ игрок движется в одном направлении. Обнаружение столкновений и способы их устранения здесь не являются проблемой.
Проблема в том, что когда игрок продолжает двигаться по диагонали при столкновении со стеной, я хочу их скользить в соответствующем направлении. Другие ответы на столкновения здесь останавливают их прямо на месте. Пока у меня это работает только с левой и правой стороны прямоугольника
Если игрок движется по диагонали, то он начинает ломаться. если они двигаются по диагонали и ударяются о левую или правую сторону объекта, с которым сталкиваются, они просто скользят вверх по стене, как обычно. Если они движутся по диагонали и касаются верха или низа, то возникает ошибка, вероятно, из-за порядка кода, который ее разрешает. Мне нужно знать, как это исправить, когда игрок сталкивается с верхней и нижней частью объекта при перемещении игрока по диагонали, левая и правая стороны в порядке.
Мне нужно было показать видео, но я не могу понять, как загрузить его сюда.
Пожалуйста, не сообщайте об этом вопросе, поскольку он похож на другие вопросы о коллизиях pygame, у меня есть посмотрел и нигде не нашел ответа и теряюсь. Если у вас есть вопрос с ответом, добавьте комментарий со ссылкой, и я проверю, работает ли она, но я перепробовал множество ответов, и ни один не помог.
Если вам нужно видео того, что происходит, оставьте комментарий, и я могу отправить его в Discord, или дайте мне знать, как поделиться видео здесь :)
def get_collisions(self, rect, entities):
hit_list = []
for entity in entities:
if rect.colliderect(entity.rect):
hit_list.append(entity.rect)
return hit_list

def update(self, player, collision_group):

movement = [player.velocity_x, player.velocity_y]

collision_types = {
'top': False,
'bottom': False,
'left': False,
'right': False,
}

player.rect.x += movement[0]
hit_list = self.get_collisions(player.rect, collision_group)
for entity in hit_list:
if movement[0] > 0:
player.rect.right = entity.left
collision_types['right'] = True
elif movement[0] < 0:
player.rect.left = entity.right
collision_types['right'] = False

player.rect.y += movement[1]
hit_list = self.get_collisions(player.rect, collision_group)
for entity in hit_list:
if movement[1] > 0:
player.rect.bottom = entity.top
collision_types['bottom'] = True
elif movement[1] < 0:
player.rect.top = entity.bottom
collision_types['top'] = False

player.pos = [player.rect.x, player.rect.y]


Подробнее здесь: https://stackoverflow.com/questions/787 ... -in-pygame

Вернуться в «Python»