Python Pygame字母击键未注册?

问题描述

我的问题是,每当我使用字母进行击键时,它都不起作用。当我将击键更改为箭头键时,该代码有效,但如果我尝试使用 WASD,则该代码无效。我试过替换变量和许多其他东西,但它仍然不起作用。

这是我的代码

import pygame
import os

pygame.init()

width = 1200
height = 800
FPS = 60

# Player 1
playerImg1 = pygame.image.load('spaceship1.png')
playerX1 = 200
playerY1 = 370
playerX_change1 = 0
playerY_change1 = 0

def player1(x1,y1):
    window.blit(playerImg1,(x1,y1))

# Player 2
playerImg2 = pygame.image.load('spaceship2.png')
playerX2 = 800
playerY2 = 370
playerX_change2 = 0
playerY_change2 = 0

def player2(x2,y2):
    window.blit(playerImg2,(x2,y2))

# gameLoop
running = True
clock = pygame.time.Clock()
while running:

    clock.tick(FPS)
    for event in pygame.event.get(): 
        if event.type == pygame.QUIT:   
            running = False
    # Keystrokes
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT: #left
            playerX_change1 = -5
        if event.key == pygame.K_RIGHT: #right
            playerX_change1 = 5
    
    if event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT or event.key == pygame.K_RIGHT:
                playerX_change1 = 0
    
    playerX1 += playerX_change1
    if playerX1 <= 0:
        playerX1 = 0
    elif playerX1 >= 400:
        playerX1 = 400

    window.blit(bg,(0,0))

    player1(playerX1,playerY1)
    player2(playerX2,playerY2)
   
    pygame.display.update()

这是不起作用的代码

import pygame
import os

pygame.init()

width = 1200
height = 800
FPS = 60

# Creating and naming the screen
window = pygame.display.set_mode((width,height))
name = pygame.display.set_caption("Duel")

# Player 1
playerImg1 = pygame.image.load('spaceship1.png')
playerX1 = 200
playerY1 = 370
playerX_change1 = 0
playerY_change1 = 0

def player1(x1,y2))

# gameLoop
running = True
clock = pygame.time.Clock()
while running:

    clock.tick(FPS)
    for event in pygame.event.get(): 
        if event.type == pygame.QUIT:   
            running = False

    # Keystrokes
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_a: #left
            playerX_change1 = -5
        if event.key == pygame.K_d: #right
            playerX_change1 = 5
    
    if event.type == pygame.KEYUP:
        if event.key == pygame.K_a or event.key == pygame.K_d:
            playerX_change1 = 0
    
    playerX1 += playerX_change1
    if playerX1 <= 0:
        playerX1 = 0
    elif playerX1 >= 400:
        playerX1 = 400

    window.blit(bg,playerY2)
   
    pygame.display.update()

    ```

解决方法

这是Indentation的问题。您必须在事件循环而不是应用程序循环中处理事件。

running = True
clock = pygame.time.Clock()
while running:

    clock.tick(FPS)
    for event in pygame.event.get(): 
        if event.type == pygame.QUIT:   
            running = False

    # INDENTATION

    #-->|
        
        # Keystrokes
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_a: #left
                playerX_change1 = -5
            if event.key == pygame.K_d: #right
                playerX_change1 = 5
        
        if event.type == pygame.KEYUP:
                if event.key == pygame.K_d or event.key == pygame.K_a:
                    playerX_change1 = 0