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/
查看缩进等一些基本语法
干杯!
我是这个 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/
查看缩进等一些基本语法干杯!