击键未在Python/Pygame中注册?

击键未在Python/Pygame中注册?,python,python-3.x,pygame,Python,Python 3.x,Pygame,我是Python新手,尤其是Pygame新手。我一直在做一个基本的太空入侵者类型的游戏,试图了解更多关于Pygame的信息,但我无法找出移动用户飞船的代码。我已经查阅了一些关于它的教程,我认为我的代码看起来不错,但我可能正在浏览一些东西。我使用的是Python版本3.8和Pygame版本1.9.6 ''' This script is creating a space invader type game with the Pygame module. Tutorial following YT

我是Python新手,尤其是Pygame新手。我一直在做一个基本的太空入侵者类型的游戏,试图了解更多关于Pygame的信息,但我无法找出移动用户飞船的代码。我已经查阅了一些关于它的教程,我认为我的代码看起来不错,但我可能正在浏览一些东西。我使用的是Python版本3.8和Pygame版本1.9.6

'''
This script is creating a space invader type game with the Pygame module.

Tutorial following YT video from  freecodecamp.org
(https://www.youtube.com/watch?v=FfWpgLFMI7w&ab_channel=freeCodeCamp.org)
'''

import sys
import pygame

# Initializing Pygame
# (ALWAYS REQUIRED)
pygame.init()

# Screen Dimensions
width = 800
height = 600
screen = pygame.display.set_mode((width, height))

# Other Game Settings
framerate = pygame.time.Clock()
framerate.tick(60)

# Setting Title and Images
pygame.display.set_caption('Space Invaders')
icon = pygame.image.load('spaceship.png')
pygame.display.set_icon(icon)
player_ship =  pygame.image.load('space-invaders.png')

def player(x,y):
    '''
    Draws the player's ship on the screen at (x,y) coordinates.
    '''
    screen.blit(player_ship,(x, y))

# Game Function
def game():
    '''
    Actual code for the game itself.
    '''
    # Sets the starting position for the player's ship
    playerX = 368 # Middle of Screen (on x-axis)
    playerY = 506 # 30px off bottom of the screen (y-axis)

    x_change = 0

    # Game Loop
    game_exit = False
    while not game_exit:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game_exit = True
            elif event.type == pygame.KEYDOWN:
                if event.type == pygame.K_ESCAPE:
                    game_exit = True
                elif event.type == pygame.K_d:
                    x_change = 5
                elif event.type == pygame.K_a:
                    x_change = -5
            elif event.type == pygame.KEYUP:
                if event.key == pygame.K_d or event.key == pygame.K_a:
                    x_change = 0

            playerX += x_change

            print(x_change) # Using this to see if the script is recognizing the user keystrokes

        # Setting Screen RGB
        screen.fill((0,0,0))

        player(playerX, playerY)

        # Screen Update
        # (ALWAYS REQUIRED)
        pygame.display.update()

game()

pygame.quit()
sys.exit()

谢谢你的帮助

问题是您正在检查
事件。键入
pygame.K\u d
,等等

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_exit = True
        elif event.type == pygame.KEYDOWN:
            if event.type == pygame.K_ESCAPE:      # <-- HERE
                game_exit = True
            elif event.type == pygame.K_d:         # <-- HERE
                x_change = 5
            elif event.type == pygame.K_a:         # <-- AND HERE
                x_change = -5

游戏将打开并显示黑色背景和用户ship图像,就像我希望的那样,但当我使用“A”或“D”键将ship从一侧移动到另一侧时,它将保持在原位并打印出x_更改值0,就像我没有按键一样。我试着用不同的字母键和箭头键替换“A”和“D”,但这并没有改变任何东西,让我相信这只是代码本身的问题,而不是我用来控制飞船的特定键。非常感谢!我知道一定有什么东西像那样从我头上飞过。我只是假设我的实际情况已经正确,这是一个问题与其他东西。我需要确保下次检查所有东西。你是救命恩人!
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_exit = True
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:      # <-- FIX HERE
                game_exit = True
            elif event.key == pygame.K_d:         # <-- FIX HERE
                x_change = 5
            elif event.key == pygame.K_a:         # <-- AND FIX HERE
                x_change = -5