Как создать идеальное столкновение с диагональным движением в Pygame - PullRequest
1 голос
/ 02 июня 2019

У меня есть столкновение.Моя проблема в том, что диагональное движение к стенам не работает.Я хочу, чтобы вы могли двигаться влево к нижней части стены, удерживая левую и верхнюю клавиши.Однако, когда я делаю это, он телепортирует меня к правой стороне стены (перемещение влево изнутри блока помещает левую сторону вашего персонажа с правой стороны стены).Я ЗНАЮ, ПОЧЕМУ он телепортирует меня, я просто не знаю, как сделать его идеальным для диагонального направленного движения.Я не знаю, как сделать так, чтобы при перемещении по диагонали меня не помещали по бокам стен.

Я пробовал много вариантов столкновения со стеной, и пока это самое близкоедобился идеального столкновения с выполнением всех 8 направленных движений.(Это довольно прекрасно с 4 основными направленными движениями, но все идет не так, когда вы пытаетесь пойти по диагонали к стене.)

def collision_check(self):

    # Move the rect
    self.rect.x += self.vel.x
    self.rect.y += self.vel.y
    self.pos = vec(self.rect.x,self.rect.y)

    # If you collide with a wall, move out based on velocity
    for wall in s.OBSTACLES:
        if self.rect.colliderect(wall.rect):
            if self.vel.y > 0: # Moving down; Hit the top side of the wall
                self.rect.bottom = wall.rect.top
                self.pos = vec(self.rect.x,self.rect.y)
                self.vel.y = 0
            if self.vel.y < 0: # Moving up; Hit the bottom side of the wall
                self.rect.top = wall.rect.bottom
                self.pos = vec(self.rect.x,self.rect.y)
                self.vel.y = 0
            if self.vel.x > 0: # Moving right; Hit the left side of the wall
                self.rect.right = wall.rect.left
                self.pos = vec(self.rect.x,self.rect.y)
                self.vel.x = 0
            if self.vel.x < 0: # Moving left; Hit the right side of the wall
                self.rect.left = wall.rect.right
                self.pos = vec(self.rect.x,self.rect.y)
                self.vel.x = 0

Мне нужно, чтобы вы держали две из 4 клавиш движения, двигаясь к стене ив другом направлении, и не будьте телепортированы на сторону, которую вы держите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...