попытка повернуть изображение в pygame для перемещения

#python #pygame #rotation

#питон #pygame #вращение

Вопрос:

я новичок в программировании, поэтому я следую некоторым онлайн-урокам, чтобы создать базовую игру. чтобы создать движение для моего персонажа, я следовал этому руководству https://www.youtube.com/watch?v=4aZe84vvE20amp;t=692samp;ab_channel=ClearCode после просмотра вращающейся части видео я попытался протестировать его. однако по какой-то причине это не работает. я не уверен, почему это так. я не получаю сообщение об ошибке, но символ остается на одном месте и не вращается, как только я нажимаю клавиши со стрелками влево и вправо. может кто-нибудь взглянуть на мой код и сообщить мне, что я сделал не так? большое спасибо

 import pygame
pygame.init()
window = pygame.display.set_mode((650, 650))
pygame.display.set_caption  ("Game")
green = (0,255,0)
window.fill(green)

class Player(pygame.sprite.Sprite):
   def __init__(self):
      super().__init__()
      self.og_image = pygame.image.load("player1.png")
      self.image = self.og_image
      self.rect = self.image.get_rect (center = (345,345))
      self.angle = 0
      self.rotate_speed = 1        
      self.direction = 0     

   def rotate(self):
      if self.direction == 1:
         self.angle -= self.rotate_speed
         print(self.angle)
      elif self.direction == -1:
         self.angle  = self.rotate_speed
         print(self.angle)
      self.image = pygame.transform.rotozoom(self.og_image, self.angle, 1)
      self.rect = self.image.get_rect(center = (self.rect.center))
   def update(self):     
      self.rotate()
      
player_1 = Player()
players = pygame.sprite.GroupSingle()
players.add(player_1)
players.draw(window)

run = True

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

      if event.type == pygame.KEYDOWN:
         if event.key == pygame.K_RIGHT:
            players.sprite.direction  = 1
         if event.key == pygame.K_LEFT:
            players.sprite.direction -= 1
            
      if event.type == pygame.KEYUP:
         if event.key == pygame.K_RIGHT:
            players.sprite.direction -= 1
         if event.key == pygame.K_LEFT:
            players.sprite.direction  = 1

      players.update()

      pygame.display.update()



pygame.quit()
 

Комментарии:

1. Мне очень жаль. Последние несколько дней я был занят. Мы надеемся вернуться к нему в ближайшие дни. Спасибо за помощь.

Ответ №1:

Вы должны нарисовать спрайты в группе ( players.draw(window) ) и очистить отображение ( window.fill(green) ) перед рисованием объектов. Обратите внимание, что вы должны делать это в цикле приложения, а не в цикле событий (это вопрос отступа).:

 run = True

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

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                players.sprite.direction  = 1
            if event.key == pygame.K_LEFT:
                players.sprite.direction -= 1
                
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT:
                players.sprite.direction -= 1
            if event.key == pygame.K_LEFT:
                players.sprite.direction  = 1

    # INDENTATION

    #<--|

    players.update()

    window.fill(green)
    players.draw(window)
    pygame.display.update()