如何在pygame中的类中不断移动精灵

时间:2015-08-21 13:36:53

标签: python pygame

我知道使用get_pressed方法测试是否按下了任何按钮,但是我无法在类函数中使用它。

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个空格,并且不会流畅地移动。

1 个答案:

答案 0 :(得分:1)

从您的代码中我只能猜测只有在处理(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)