окно pygame, показывающее «не отвечает»

#python #pygame

#python #pygame

Вопрос:

Когда я запускаю свою программу pygame, окно игры показывает, что оно не отвечает, и я также написал функцию выхода, но я не знаю, почему снова появляется объявление, которое снова не отвечает, а на моем ноутбуке установлена Windows 8 и 32-разрядная версия

     import pygame

#initializing pygame
pygame.init()

# create game screen
screen = pygame.display.set_mode((800,600))

# Title and Icon
pygame.display.set_caption("Space Invader")
icon = pygame.image.load('spaceship.png')
pygame.display.set_icon(icon)

# Player
playerImg = pygame.image.load('player.png')
playerX = 370
playerY = 480
playerX_change = 0

def player(x,y):
    screen.blit(playerImg,(x,y))

# Game Loop
running = True
while running:

    # RGB - Red, Green, Blue
    screen.fill((0,0,0))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()

        # if keystroke is pressed check the weather its right or left
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                playerX_change = -0.1
            if event.key == pygame.K_RIGHT:
                playerX_change = 0.1 
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                playerX_change = 0.1
        
        # 5 = 5   -0.1 -> 5 = 5 - 0.1
        # 5 = 5   0.1
        playerX  = player_change
        player(playerX, playerY)

        pygame.display.update()
    
       
  

Ответ №1:

Это вопрос отступа. Вы должны обновить отображение в цикле приложения, а не в цикле событий.
Кроме того, имя переменной playerX_change вместо player_change и когда клавиша отпущена, вы должны установить playerX_change = 0.0 вместо playerX_change = 0.1 :

 running = True
while running:

    # RGB - Red, Green, Blue
    screen.fill((0,0,0))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()

        # if keystroke is pressed check the weather its right or left
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                playerX_change = -0.1
            if event.key == pygame.K_RIGHT:
                playerX_change = 0.1 
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                playerX_change = 0.0 # <---- 0.0 instead of 0.1


    #<--| INDENTATION
    # 5 = 5   -0.1 -> 5 = 5 - 0.1
    # 5 = 5   0.1
    playerX  = playerX_change
    player(playerX, playerY)

    pygame.display.update()