Вопрос, с которым Pygame столкновения платформер при движении по горизонтали, причиной этапности через плитку
Опишите проблему у меня возникли проблемы с моей логикой столкновения платформеров python, я недавно начал следовать учебникам создателя youtube для платформеров pygame. И не было никаких проблем в создании платформера до логики столкновения. Я пытался усовершенствовать свой код, но у меня все еще есть проблемы;
Например:
1. Когда я двигаюсь в любом направлении, находясь на вершине плитки, я фазирую корыто плитки вертикально.
2. Когда я приземляюсь на верхнюю часть плитки, ноги моего персонажа застревают на несколько пикселей внутри плитки.
3. (На самом деле это не проблема) Я понятия не имею, как писать прыжковый код, я попытался изменить скорость Y на -5, а затем игра вышла из строя.
Моя цель с логикой столкновения состояла в том, чтобы остановить игрока при столкновении с блоком, а точнее, при столкновении со стороной игрок останавливается.
Файл проекта: https://github.com/1NilusNilus/Pygame-Platformer
Код движения для игрока:
def move(self): print(self.VEL) self.RECT.x = self.POS[0] self.RECT.y = self.POS[1] self.POS[0] = self.RECT.x self.POS[1] = self.RECT.y self.POS[0] += self.VEL[0] self.VEL[0] = 0 if self.DIR["left"]: self.VEL[0] = -5 if self.DIR["right"]: self.VEL[0] = 5 for tile in self.TILE.testCollision(self.RECT): if self.VEL[0] > 0: self.RECT.left = tile.right if self.VEL[0] < 0: self.RECT.right = tile.left self.POS[1] += self.VEL[1] self.VEL[1] += self.GRAVITY for tile in self.TILE.testCollision(self.RECT): if self.VEL[1] > 0: self.VEL[1] = 0 self.RECT.bottom = tile.top
Код столкновения для плиток:
def testCollision(self, rect): self.RECT.x = self.POS[0] self.RECT.y = self.POS[1] hitlist = [] for tile in self.TILES: if rect.colliderect(tile): hitlist.append(self.RECT) return hitlist
Что я уже пробовал:
Я пытался переписать код несколько раз, я пытался смотреть учебники снова и снова, я пытался задавать веб-вопросы и исследовать.