首页 > 解决方案 > pygame sprite 不会随着每次精灵更新而自动移动

问题描述

我正在尝试为我正在构建的 pygame 制作一个过场动画,在这个 pygame 中,我试图让主要玩家精灵在屏幕的最右侧生成,然后慢慢向中心移动。出于某种原因,它并没有移动,而是完全保持静止,尽管我在过场动画中应用的相同逻辑在我使用按键来移动玩家而不是自动更新时在主游戏中完全可以正常工作。

我基本上只是遵循我在主游戏中所做的相同逻辑,除了它不是由于按键而移动,而是由于精灵更新而移动。这是我的精灵代码:

class Player(pygame.sprite.Sprite):
  def __init__(self):
      pygame.sprite.Sprite.__init__(self)
      self.image = pygame.Surface((30, 60))
      self.image = pygame.image.load("soldier.png").convert_alpha()
      self.rect = self.image.get_rect()
      self.rect.x = WIDTH - 30
      self.rect.y = HEIGHT - 60
      self.speedx = -5
      self.speedy = 0
      self.count = 0
      tru = False
  def update(self):
      self.count += 1
      if self.count > 10:
          self.speedx -= 5
          self.count = 0
      else:
          self.speedx = 0
          if self.rect.x < WIDTH / 2:
              self.speedx = 0
      self.rect.x += self.speedx

这是我的主要游戏循环

game_over = True
running = True
CurrentLevel = 1
while running:
    all_sprites = pygame.sprite.Group()
    curtime = pygame.time.get_ticks()
    platforms = pygame.sprite.Group()
    bullets = pygame.sprite.Group()
    grounds = pygame.sprite.Group()
    thentime = pygame.time.get_ticks()
    for plat in PLATFORMS:
        p = Platform(*plat)
        all_sprites.add(p)
        platforms.add(p)
    for gro in GROUNDS:
        g = Ground(*gro)
        all_sprites.add(g)
        grounds.add(g)
    player = Player()
    all_sprites.add(player)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_d:
                running = False
    all_sprites.update()

    screen.fill(WHITE)
    screen.blit(bg, [0, 0])
    all_sprites.draw(screen)
    pygame.display.flip()     

结果是这样的: 输出 屏幕最右侧的玩家精灵只是停留在原处,没有按应有的方式移动。有谁知道发生了什么事?

标签: pythonpygame

解决方案


在你的while running循环中,你有一行player = Player()and all_sprites.add(player)。这意味着每一帧,您的游戏都会创建一个新的玩家对象并在屏幕右侧实例化它,因此它永远没有机会移动。


推荐阅读