我制作了一个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
我需要我的精灵在屏幕结束之前停止在屏幕上方停止播放或停止播放。谢谢
答案 0 :(得分:1)
精灵是从左上角绘制的,因此,可以完全从sprite.rect.x >= 0
和sprite.rect.x < WINDOW_WIDTH - sprite.rect.width
绘制精灵。 (对于y
也是如此)。
这为您提供了两种方法:
player.vel
可以使用的数量并加以限制。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