1NilusNIlus Ответов: 0

Вопрос, с которым 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


Что я уже пробовал:

Я пытался переписать код несколько раз, я пытался смотреть учебники снова и снова, я пытался задавать веб-вопросы и исследовать.

0 Ответов