Проблема в том, что когда игрок продолжает двигаться по диагонали при столкновении со стеной, я хочу их скользить в соответствующем направлении. Другие ответы на столкновения здесь останавливают их прямо на месте. Пока у меня это работает только с левой и правой стороны прямоугольника
Если игрок движется по диагонали, то он начинает ломаться. если они двигаются по диагонали и ударяются о левую или правую сторону объекта, с которым сталкиваются, они просто скользят вверх по стене, как обычно. Если они движутся по диагонали и касаются верха или низа, то возникает ошибка, вероятно, из-за порядка кода, который ее разрешает. Мне нужно знать, как это исправить, когда игрок сталкивается с верхней и нижней частью объекта при перемещении игрока по диагонали, левая и правая стороны в порядке.
Мне нужно было показать видео, но я не могу понять, как загрузить его сюда.
Пожалуйста, не сообщайте об этом вопросе, поскольку он похож на другие вопросы о коллизиях 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