首页 > 解决方案 > 使用 pygame.Surface() 后 Pygame 精灵不会更新

问题描述

我正在使用 pygame 制作一个简单的平台游戏,但我似乎无法弄清楚如何更新我的精灵(现在它只是一个矩形)。每一个提示都会非常感激。

这是我的代码:

class Player(pygame.sprite.Sprite):
def __init__(self):
    pygame.sprite.Sprite.__init__(self) 
    self.image = pygame.Surface((50, 50))
    self.image.fill(WHITE)
    self.rect = self.image.get_rect()
    self.rect.center = (WIDTH / 2, HEIGHT / 2)
    self.pos = vect(WIDTH / 2, HEIGHT / 2)
    self.vel = vect(0, 0)
    self.acc = vect(0, 0)



def update(self):
    self.acc = vect(0, 0)
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        self.acc.x = -0.5
    if keys[pygame.K_RIGHT]:
        self.acc.y = 0.5
    self.vel += self.acc
    self.pos += self.vel + 0.5 * self.acc
    self.rect.center = self.pos



player = Player()
FPS = 40
RECT_WIDTH = 50
RECT_HEIGHT = 50
run = True



while run:
pygame.time.Clock().tick(FPS)

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        run = False

screen.fill(LIGHT_PURPLE)

player.update()


pygame.display.flip()

我没有把所有的都像颜色变量赋值一样,但我很确定错误就在这里

标签: pythonpygamesprite

解决方案


2个选项:

一个)。添加绘图功能并绘制精灵 - 简单修复

乙)。制作一个精灵组并绘制所有精灵 - 如果使用大量精灵则很好

绘制函数

 def update(self):
        self.acc = vect(0, 0)
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.acc.x = -0.5
        if keys[pygame.K_RIGHT]:
            self.acc.y = 0.5
        self.vel += self.acc
        self.pos += self.vel + 0.5 * self.acc
        self.rect.center = self.pos
        self.draw() # draw the sprite

    def draw(self):
        screen.blit(self.image,self.rect)

雪碧组:

Sprites = pygame.sprite.Group()

player = Player()
Sprites.add(player)

然后在循环中

Sprites.update() # calls the update function in every sprite
Sprites.draw(screen) # draws every sprite onto the screen

推荐阅读