как я могу заставить своего персонажа перестать проходить мимо правой части экрана? - PullRequest
1 голос
/ 14 мая 2019

Я сделал спрайт размером 30х30 пикселей. Он продолжает перемещаться по правой стороне экрана, и я знаю, что это как-то связано со скоростью

Я также пытался вычесть player.vel из w, но это не сработало.

h = 550
w = 360
win = pygame.display.set_mode((w,h))

вот мои условные высказывания:

 if key[pygame.K_a] and player.x > 0:
     player.x -= player.vel
 if key[pygame.K_d] and player.x < w - 30:
     player.x += player.vel     

player.vel равен 20

Мне нужен мой спрайт, чтобы перестать ходить по экрану или останавливаться до конца экрана. Спасибо

1 Ответ

1 голос
/ 14 мая 2019

Спрайт рисуется из верхнего левого угла, что означает, что спрайт может быть нарисован полностью из sprite.rect.x >= 0 и sprite.rect.x < WINDOW_WIDTH - sprite.rect.width. (И аналогично для y).

Это дает вам два подхода:

  1. Перед перемещением подсчитайте, сколько из player.vel можно использовать, и ограничьте его.
  2. После перемещения убедитесь, что игрок x,y все еще на экране.

Обычно второй вариант проще:

class PlayerSprite( pygame.sprite.Sprite ):
    def __init__( self, bitmap, x, y ):
        pygame.sprite.Sprite.__init__( self )
        self.image = bitmap
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y

    def move( self, x_dir, y_dir ):
        self.rect.x += x_dir
        self.rect.y += y_dir
        # stay on screen
        if ( self.rect.x < 0 ):
            self.rect.x = 0
        elif ( self.rect.x > WINDOW_WIDTH - self.rect.width ):
            self.rect.x = WINDOW_WIDTH - self.rect.width - 1
        if ( self.rect.y < = 0 ):
            self.rect.y = 0
        elif ( self.rect.y > WINDOW_HEIGHT - self.rect.height ):
            self.rect.y = WINDOW_HEIGHT - self.rect.height - 1

    def update( self ):
        pass # TODO

Что означает, что вызывающему коду не нужно беспокоиться о vel или о позиции:

if key[pygame.K_a]:
    player.move( -player.vel, 0 )  # left
if key[pygame.K_d]:
    player.move( player.vel, 0 )   # right
if key[pygame.K_w]:
    player.move( 0, -player.vel )  # up
if key[pygame.K_x]:
    player.move( 0, player.vel )   # waaay down
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...