如何使角色停止越过屏幕右侧?

时间:2019-05-14 01:48:59

标签: python python-3.x pygame

我制作了一个30x30像素的精灵。它一直遍历屏幕的右侧,我知道它与速度有关

我也尝试过从w中减去player.vel,但这没有用。

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 个答案:

答案 0 :(得分:1)

精灵是从左上角绘制的,因此,可以完全从sprite.rect.x >= 0sprite.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