key.event 混淆 // pygame.K_a 不起作用

key.event confusion // pygame.K_a doesn't work

我是这个 python 行业的新手,当我按下 'd' 时,我的角色应该是正确的,但这并没有发生,与 'a' 一样。当我将 K_a 和 K_d 更改为 K_LEFT 和 K_RIGHT 它起作用时,我的角色移动得很好,但是如果我想让角色移动 'a' 和'd',它不起作用,我的代码有什么问题:

import pygame
import sys
import os

pygame.init()

screen = pygame.display.set_mode((1366,768))

pygame.display.set_caption("Adventure in the Woods")
icon = pygame.image.load('tree.png')
pygame.display.set_icon(icon)

#Player
playerImg = pygame.image.load('ninja.png')
playerX = 100
playerY = 650
velocity = 0.1

run = True
while run:

    screen.fill( (9, 66, 2) )
    screen.blit(playerImg, (playerX,playerY) )

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_a:
            print('a')
            playerX -= velocity
        
        if event.key == pygame.K_d:
            print('d')
            playerX += velocity
        

             
    pygame.display.update()

问题洞察力

问题出在你的if event.type == pygame.KEYDOWN: ...范围内,因为它应该在for-loopfor event in pygame.event.get(): ...范围内:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        run = False

if event.type == pygame.KEYDOWN: #<-------------- From here
    if event.key == pygame.K_a:
        print('a')
        playerX -= velocity
    
    if event.key == pygame.K_d:
        print('d')
        playerX += velocity     #<-------------- to here

解决方案

这可以通过缩进从 if event.type == pygame.KEYDOWN: ... 开始的代码块来解决,如下所示:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        run = False

    if event.type == pygame.KEYDOWN: #<-------------- Now inside the for-loop
        if event.key == pygame.K_a:
            print('a')
            playerX -= velocity
    
        if event.key == pygame.K_d:
            print('d')
            playerX += velocity

其他备注

要更熟悉 python 代码结构和样式,请访问样式指南@https://www.python.org/dev/peps/pep-0008/

查看缩进等一些基本语法

干杯!