pygame на mac не закрывает и не регистрирует ключи

#python #pygame

Вопрос:

У меня возникли проблемы с pygame на mac. Он не закроется при нажатии на кнопку «x». Он также вообще не будет перемещать космический корабль с помощью клавиш со стрелками. Есть какие-нибудь предложения?

 while running:
    screen.fill((255,0,0))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        
    if event.type == pygame.KEYDOWN:
        if event.type == pygame.K_LEFT:
            playerX_change = -0.1
        if event.type == pygame.K_RIGHT:
            playerX_change = 0.1
    if event.type == pygame.KEYUP:
        if event.type == pygame.K_LEFT or event.type == pygame.K_RIGHT:
            playerX_change=0
        

playerX =playerX_change

player(playerX, playerY)
pygame.display.update()
    
 

Фактический код

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

1. обновление…я смог заставить космический корабль двигаться, исправив строку в коде. вместо «событие.ключ» я ввел «событие.тип». Как только я это исправил, корабль начал двигаться. Однако у меня все еще возникают проблемы с закрытием игры… дай мне знать, если кто-нибудь догадается об этом.

Ответ №1:

Хорошо, ваш код для меня не завершен, но у меня есть идея, которая возникла.

 while running:
    screen.fill((255,0,0))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        
    if event.type == pygame.KEYDOWN:
        if event.type == pygame.K_LEFT:
            playerX_change = -0.1
            playerX =playerX_change

        if event.type == pygame.K_RIGHT:
            playerX_change = 0.1
            playerX =playerX_change

    if event.type == pygame.KEYUP:
        if event.type == pygame.K_LEFT or event.type == pygame.K_RIGHT:
            playerX_change=0
 

player(playerX, playerY)
pygame.display.update()
 

Возможно, если вы перейдете на позицию, которая напрямую меняет соответствующую позицию, все будет нормально

PlayerX =Обмен игроками

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

1. Космический корабль не только не движется, но и экран не закрывается при нажатии «x». может ли это быть проблемой с настройкой/загрузкой pygame вместо самого кода?

2. из pygame.импорт местных жителей *

Ответ №2:

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

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

1. Спасибо, но последние три строки находятся во всем цикле.

2. @jara извините, но когда я писал, их не было. Изображения там не было, и если вы скопируете и вставите код, вы увидите, о чем я говорю.

Ответ №3:

Это вопрос Отступа. События должны быть оценены в цикле событий:

 while running:
    screen.fill((255,0,0))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # INDENTATION
    #-->|
        
        if event.type == pygame.KEYDOWN:
            if event.type == pygame.K_LEFT:
                playerX_change = -0.1
            if event.type == pygame.K_RIGHT:
                playerX_change = 0.1
        if event.type == pygame.KEYUP:
            if event.type == pygame.K_LEFT or event.type == pygame.K_RIGHT:
                playerX_change=0
            

    playerX =playerX_change

    player(playerX, playerY)
    pygame.display.update()
 

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

1. Спасибо, но все коды имеют отступы, как и должно быть. Просто уточните, коды были скопированы с видео на YouTube, и это сработало на видео. Когда я запускаю коды на своем Mac, он не закрывает pygame и не перемещает корабли при нажатии на стрелки.