Pygame не перемещает прямоугольник, который я нарисовал на экране

#python-3.x #pygame

#python-3.x #pygame

Вопрос:

Вот код для игры, которую я пытаюсь создать (ремейк flappy bird)

     def move():

        global bird_x
        global bird_y

        pygame.draw.rect(win,(0,0,0), (0,0,1000,1000))
        pygame.draw.rect(win,(255,0,0),(bird_x, bird_y, 30, 30))
        pygame.display.update()
    
while True:
    keys = pygame.key.get_pressed()
    if keys[pygame.K_UP]:
        bird_y  = 60
    fb.move()
    time.sleep(0.005)
  

Когда я пытаюсь запустить этот код, «птица» (красный квадрат) не перемещается, я изменил используемые клавиши, я перенес перемещение в функции и из них, и ничего не работает.
(это обрезанный код, поэтому переменные, вероятно, не будут существовать)

полный код:

 import time
import random
pygame.init()

win = pygame.display.set_mode((400,600))
pygame.display.set_caption('Flappy Bird')

pipex = 345
pipe1y = -270
pipe2y = 420
width = 65
height1 = 400
height2 = 3000

vel = 5
bird_x = 20
bird_y = 300
isJump = False
jumpCount = 10

class fb:
    def move():
        global pipex
        global yy
        global pipe1y
        global pipe2y
        global bird_x
        global bird_y
        pipex -= 1
        if pipex < -60:
            pipex = 345
            yy = random.randint(-350,0)
            pipe1y = yy
            pipe2y = pipe1y   555
        pygame.draw.rect(win,(0,0,0), (0,0,1000,1000))
        pygame.draw.rect(win,(0, 255, 0), (pipex, pipe1y, width, height1))
        pygame.draw.rect(win,(0, 255, 100), (pipex, pipe2y, width, height2))
        pygame.draw.rect(win,(255,0,0),(bird_x, bird_y, 30, 30))
        pygame.display.update()
    
while True:
    keys = pygame.key.get_pressed()
    if keys[pygame.K_UP]:
        bird_y  = 60
    fb.move()
    time.sleep(0.005)

  

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

1. Это выглядит нормально, возможно, вам придется опубликовать больше кода, чтобы мы могли определить причину.

2. Сколько строк кода? Если <400, опубликуйте все

3. @Deuce готово, надеюсь, в моем коде ошибка

Ответ №1:

Измените свой основной цикл на этот:

 while True:
    keys = pygame.key.get_pressed()
    if keys[pygame.K_UP]:
        bird_y -= 1
    if keys[pygame.K_DOWN]:
        bird_y  = 1
    fb.move()
    time.sleep(0.005)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            break
  

вы не тестировали события
вам нужно обрабатывать события

PS: я добавил движение вниз

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

1. Вероятно, оператору также следует удалить time.sleep() и добавить ограничение FPS с помощью pygame.time.clock() и a clock.tick_busy_loop(60)