Момент объекта на экране выпуска - Pygame - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь помешать моему объекту исчезнуть с экрана при использовании клавиш со стрелками. Мне удалось остановить его выход в левую и правую части экрана, но когда я применил одинаковые логики c для верхней и нижней частей, это не сработало. Не могли бы вы посоветовать, пожалуйста?

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(os.path.join(image_folder, "Zero Position.png")).convert()
        self.image.set_colorkey(WHITE)
        self.rect = self.image.get_rect()
        self.rect.center = (WIDTH /2, HEIGTH / 2)
        self.speedx = 0
        self.speedy = 0

    def update(self):
        self.speedx = 0
        self.speedy = 0
        keystate = pygame.key.get_pressed()
        if keystate[pygame.K_LEFT]:
            self.speedx = - 10
            if self.rect.left == 10:
                self.speedx = 0
        if keystate[pygame.K_RIGHT]:
            self.speedx = 10
            if self.rect.right == WIDTH - 10:
                self.speedx = 0
        if keystate[pygame.K_UP]:
            self.speedy = - 10
            if self.rect.top == 10:
                self.speedy = 0
        if keystate[pygame.K_DOWN]:
            self.speedy = 10
            if self.rect.bottom == HEIGTH - 50:
                self.speedy = 0

        self.rect.x += self.speedx
        self.rect.y += self.speedy

1 Ответ

0 голосов
/ 25 января 2020

Лучше использовать <= и >= вместо ==.

Если он имеет (случайно) позицию 19 и затем переместится на 9, то 9 == 10 не остановит его, но 9 <= 10 остановит.

Вы даже можете переместить его обратно в положение 10, когда оно имеет положение 9

    if keystate[pygame.K_LEFT]:
        self.speedx = - 10
        if self.rect.left <= 10:  # <= instead of ==
            self.rect.left = 10:  # move it back
            self.speedx = 0

    if keystate[pygame.K_RIGHT]:
        self.speedx = 10
        if self.rect.right >= WIDTH - 10:  # >= instead of ==
            self.rect.right = WIDTH - 10:  # move it back
            self.speedx = 0

    if keystate[pygame.K_UP]:
        self.speedy = - 10
        if self.rect.top <= 10:  # <= instead of ==
            self.rect.top = 10:  # move it back
            self.speedy = 0

    if keystate[pygame.K_DOWN]:
        self.speedy = 10
        if self.rect.bottom >= HEIGTH - 50:  # >= instead of ==
            self.rect.bottom = HEIGTH - 50:  # move it back
            self.speedy = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...