如何在 pygame 中的 class 内不断移动精灵
How to constantly move the sprite within a class in pygame
我知道使用 get_pressed 方法来测试是否按下了任何按钮,但是我无法在 class 函数中使用它。
class MainCharacter (pg.sprite.Sprite):
def __init__(self, pos, direction, images, *groups):
pg.sprite.Sprite.__init__(self, *groups)
self.direction = direction
self.images = images
self.image = self.images[self.direction]
self.rect = self.image.get_rect(topleft=pos)
def get_event(self, event):
keys = pg.key.get_pressed()
if keys[pg.K_a]:
self.direction = "left"
self.rect.move_ip(-6, 0)
elif keys[pg.K_d]:
self.direction = "right"
self.rect.move_ip(6, 0)
elif keys[pg.K_w]:
self.rect.move_ip(0, -6)
self.direction = "up"
elif keys[pg.K_s]:
self.direction = "down"
self.rect.move_ip(0, 6)
self.image = self.images[self.direction]
我每按一个按钮,精灵仍然会移动6格,并且不会流畅地移动。
根据您的代码,我只能猜测您仅在处理 (keydown-) 事件时才调用 get_event
。
将 get_event
重命名为 update
并将其命名为 每 帧,例如:
while True:
for e in pygame.event.get():
if e.type == blablabla
...some event handling...
yoursprite.update()
而不是
while True:
for e in pygame.event.get():
if e.type == pygame.KEYDOWN:
yoursprite.get_event(e)
我知道使用 get_pressed 方法来测试是否按下了任何按钮,但是我无法在 class 函数中使用它。
class MainCharacter (pg.sprite.Sprite):
def __init__(self, pos, direction, images, *groups):
pg.sprite.Sprite.__init__(self, *groups)
self.direction = direction
self.images = images
self.image = self.images[self.direction]
self.rect = self.image.get_rect(topleft=pos)
def get_event(self, event):
keys = pg.key.get_pressed()
if keys[pg.K_a]:
self.direction = "left"
self.rect.move_ip(-6, 0)
elif keys[pg.K_d]:
self.direction = "right"
self.rect.move_ip(6, 0)
elif keys[pg.K_w]:
self.rect.move_ip(0, -6)
self.direction = "up"
elif keys[pg.K_s]:
self.direction = "down"
self.rect.move_ip(0, 6)
self.image = self.images[self.direction]
我每按一个按钮,精灵仍然会移动6格,并且不会流畅地移动。
根据您的代码,我只能猜测您仅在处理 (keydown-) 事件时才调用 get_event
。
将 get_event
重命名为 update
并将其命名为 每 帧,例如:
while True:
for e in pygame.event.get():
if e.type == blablabla
...some event handling...
yoursprite.update()
而不是
while True:
for e in pygame.event.get():
if e.type == pygame.KEYDOWN:
yoursprite.get_event(e)