pygame "move_ip" 方法似乎不起作用
pygame "move_ip" method seems not working
我正在做一个简单的脚本,使用 pygame,它只是移动一个矩形,但是方法 move_ip
似乎没有做任何事情(我按照 RealPython tutorial)。
综上,我得到了一个classPlayer
,如下:
class Player(pygame.sprite.Sprite):
def __init__(self):
super(Player, self).__init__()
self.surf = pygame.Surface((75, 25))
self.surf.fill((255, 255, 255))
self.rect = self.surf.get_rect()
def update(self, pressed_k):
if pressed_k[K_UP]:
self.rect.move_ip(0, -5)
if pressed_k[K_DOWN]:
self.rect.move_ip(0, 5)
if pressed_k[K_LEFT]:
self.rect.move_ip(-5, 0)
if pressed_k[K_RIGHT]:
self.rect.move_ip(5, 0)
然后我得到了前面描述的class的一个实例player
,就是循环使用的,如下:
while running:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
elif event.type == QUIT:
running = False
pressed_keys = pygame.key.get_pressed()
player.update(pressed_keys)
screen.fill((0, 0, 0))
screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
pygame.display.flip()
当我 运行 它正确创建 windows 的代码(显示一个白色矩形,代表玩家)并且程序似乎读取键盘输入但代表玩家的块确实没有任何动作。
(实例方法 .update
被正确调用,各种 'if'
语句也正常工作,但亲戚 self.rect.move_ip
没有对玩家)
玩家在 (SCREEN_WIDTH/2, SCREEN_HEIGHT/2)
不断被吸引
screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
您必须将播放器拖到 rect
属性中存储的位置。 pygame.Surface.blit)
的第二个参数可以是一个矩形。在这种情况下,矩形的左上角将用作 blit 的位置:
screen.blit(player.surf, player.rect)
但是,如果您使用的是 pygame.sprite.Sprite
then you should also use pygame.sprite.Group
,例如:
player_group = pygame.sprite.Group(player)
while running:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
elif event.type == QUIT:
running = False
pressed_keys = pygame.key.get_pressed()
player_group.update(pressed_keys)
screen.fill((0, 0, 0))
player_group.draw(screen)
pygame.display.flip()
我正在做一个简单的脚本,使用 pygame,它只是移动一个矩形,但是方法 move_ip
似乎没有做任何事情(我按照 RealPython tutorial)。
综上,我得到了一个classPlayer
,如下:
class Player(pygame.sprite.Sprite):
def __init__(self):
super(Player, self).__init__()
self.surf = pygame.Surface((75, 25))
self.surf.fill((255, 255, 255))
self.rect = self.surf.get_rect()
def update(self, pressed_k):
if pressed_k[K_UP]:
self.rect.move_ip(0, -5)
if pressed_k[K_DOWN]:
self.rect.move_ip(0, 5)
if pressed_k[K_LEFT]:
self.rect.move_ip(-5, 0)
if pressed_k[K_RIGHT]:
self.rect.move_ip(5, 0)
然后我得到了前面描述的class的一个实例player
,就是循环使用的,如下:
while running:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
elif event.type == QUIT:
running = False
pressed_keys = pygame.key.get_pressed()
player.update(pressed_keys)
screen.fill((0, 0, 0))
screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
pygame.display.flip()
当我 运行 它正确创建 windows 的代码(显示一个白色矩形,代表玩家)并且程序似乎读取键盘输入但代表玩家的块确实没有任何动作。
(实例方法 .update
被正确调用,各种 'if'
语句也正常工作,但亲戚 self.rect.move_ip
没有对玩家)
玩家在 (SCREEN_WIDTH/2, SCREEN_HEIGHT/2)
screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
您必须将播放器拖到 rect
属性中存储的位置。 pygame.Surface.blit)
的第二个参数可以是一个矩形。在这种情况下,矩形的左上角将用作 blit 的位置:
screen.blit(player.surf, player.rect)
但是,如果您使用的是 pygame.sprite.Sprite
then you should also use pygame.sprite.Group
,例如:
player_group = pygame.sprite.Group(player)
while running:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
elif event.type == QUIT:
running = False
pressed_keys = pygame.key.get_pressed()
player_group.update(pressed_keys)
screen.fill((0, 0, 0))
player_group.draw(screen)
pygame.display.flip()