• Почему pygame работает нестабильно?

    @ZhikharevKirill
    Всё просто
    У вас движение игрока привязано к частоте обновления игры, т.е. чаще обновляется - чаще двигается - быстрее перемещается
    Исправить это можно домножив скорость игрока на задержку между обновлениями, вот так
    delay = 20
    
    pygame.time.delay(delay)
    
    pos += speed * delay

    Тем самым мы получаем, что игрок всегда двигается со скорость speed в миллисекунду
    Итоговый код
    import pygame
    
    pygame.init();
    win = pygame.display.set_mode((320,320));
    pygame.display.set_caption("Game")
    
    x = 144
    y = 144
    width = 32
    height = 32
    speed = 5
    
    delay = 20
    
    run = True
    
    while run:
      pygame.time.delay(delay)
      for event in pygame.event.get():
        if event.type == pygame.QUIT:
          run = False
      keys = pygame.key.get_pressed()
      if keys[pygame.K_UP]:
        y-=speed*delay
      if keys[pygame.K_LEFT]:
        x-=speed*delay
      if keys[pygame.K_RIGHT]:
        x+=speed*delay
      if keys[pygame.K_DOWN]:
        y+=speed*delay
      win.fill((0,0,0))
      pygame.draw.rect(win, (0,0,255), (x,y,width,height))
      pygame.display.update()	
    pygame.quit()


    Но можно сделать ещё лучше
    Можно напрямую указывать фпс, который будет контролироваться pygame

    import pygame
    
    pygame.init();
    win = pygame.display.set_mode((320,320));
    pygame.display.set_caption("Game")
    
    fps = 60
    fps_clock = pygame.time.Clock()
    
    x = 144
    y = 144
    width = 32
    height = 32
    speed = 5
    
    run = True
    
    while run:
      for event in pygame.event.get():
        if event.type == pygame.QUIT:
          run = False
      keys = pygame.key.get_pressed()
      if keys[pygame.K_UP]:
        y-=speed
      if keys[pygame.K_LEFT]:
        x-=speed
      if keys[pygame.K_RIGHT]:
        x+=speed
      if keys[pygame.K_DOWN]:
        y+=speed
      win.fill((0,0,0))
      pygame.draw.rect(win, (0,0,255), (x,y,width,height))
      pygame.display.update()	
    
      fps_clock.tick(fps)
    pygame.quit()
    Ответ написан
    Комментировать