Плеер не отображается при запуске кода?

#python #pygame #display

Вопрос:

Код может выдавать некоторые ошибки, но я их не понимаю. Я пытался их обыскать, но ничего не вышло!

Ошибки заключаются в:

   File "d:Pythonsendsendclient.py", line 67, in <module>
    main()
  File "d:Pythonsendsendclient.py", line 64, in main
    redrawWindow(win,p)
  File "d:Pythonsendsendclient.py", line 50, in redrawWindow
    pygame.display.update()
 

Код такой:

 import pygame

                                                    
width = 500
height = 500
win = pygame.display.set_mode ((width, height))
pygame.init()
pygame.display.set_caption("Client")

clientNumber = 0

class Player:
    def __init__(self, x, y, width, height, color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = (x,y,width,height)
        self.val = 3
    
    def draw(self,win):
        pygame.init()
        pygame.draw.rect(win, self.color, self.rect)

    def move(self):
        pygame.init()
        keys = pygame.key.get_pressed()

        if keys[pygame.K_LEFT]:
            self.x -= self.vel

        if keys[pygame.K_RIGHT]:
            self.x  = self.vel

        if keys[pygame.K_DOWN]:
            self.y -= self.vel

        if keys[pygame.K_UP]:
            self.y  = self.vel

        self.rect = self.x,self.y,self.width,self.height

     


def redrawWindow(win,player):   
    player.draw(win)                              
    win.fill((0,0,255))
    pygame.display.update()

def main () :                                       
    run = True
    p = Player(50,50,100,100,(0,255,0))

    while run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:           
                run = False
                pygame.init()
                pygame.quit()
        
        pygame.init()
        p.move()
        redrawWindow(win,p)    

pygame.init()
main() 
 

Я пытаюсь закодировать онлайн — игру с помощью этого урока:

https://www.youtube.com/watch?v=McoDjOCb2Zoamp;t=22s

Кстати, это мой первый пост, так что извините, если я допустил какие-либо ошибки!

Ответ №1:

В нем есть опечатка Player.__init__ . self.val должно быть self.vel :

self.val = 3

 self.vel = 3
 

Вам нужно нарисовать игрока после очистки фона и перед обновлением экрана:

 def redrawWindow(win,player):  
    win.fill((0,0,255)) 
    player.draw(win)                              
    pygame.display.update()
 

Используйте pygame.time.Clock для управления кадрами в секунду и, следовательно, скоростью игры.

Метод tick() pygame.time.Clock объекта задерживает игру таким образом, что каждая итерация цикла занимает один и тот же период времени. Видеть pygame.time.Clock.tick() :

Этот метод следует вызывать один раз за кадр.

 def main () :                                       
    run = True
    p = Player(50,50,100,100,(0,255,0))

    clock = pygame.time.Clock()
    while run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:           
                run = False
                pygame.init()
                pygame.quit()
        
        pygame.init()
        p.move()
        redrawWindow(win,p)
        clock.tick(60)    

pygame.init()
main() 
 

Типичный цикл приложений PyGame должен:

  • обрабатывайте события с помощью или pygame.event.pump() или pygame.event.get() .
  • обновляйте игровые состояния и положения объектов в зависимости от входных событий и времени (соответственно кадров).
  • очистите весь дисплей или нарисуйте фон
  • нарисуйте всю сцену ( blit все объекты)
  • обновите дисплей pygame.display.update() с помощью или pygame.display.flip()
  • ограничьте количество кадров в секунду, чтобы ограничить загрузку процессора с помощью pygame.time.Clock.tick