спрайт Pygame не перемещается автоматически при каждом обновлении спрайта - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь создать сцену для созданной мной пигмеи, и в этой пигме я пытаюсь заставить спрайта основного игрока появляться в правой части экрана, прежде чем медленно двигаться к центр. По какой-то причине, вместо того, чтобы двигаться, он просто остается совершенно неподвижным, несмотря на то, что та же логика, которую я применил в кат-сцене, прекрасно работает в основной игре, когда я использую нажатия клавиш для перемещения игрока вместо автоматического обновления.

Я просто следовал той же логике, что и в основной игре, за исключением того, что вместо перемещения в результате нажатия клавиши он перемещается в результате обновления спрайта. Это мой код для спрайта:

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()     

Вот каков будет результат: выход Этот спрайт игрока в дальнем правом углу экрана просто остается там и не двигается так, как должен. Кто-нибудь знает, что происходит?

1 Ответ

0 голосов
/ 11 июня 2019

В вашей петле while running есть строка player = Player() и all_sprites.add(player). Это означает, что каждый кадр вашей игры создает новый объект игрока и создает его экземпляр в правой части экрана, поэтому у него никогда не будет возможности двигаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...