Pygame 大多数关键输入不起作用,例如 (w, a, s, d)。只有箭头键似乎在工作
Pygame majority of the key inputs are not working, eg(w, a, s, d). Only the arrow keys seem to be working
import pygame
pygame.init()
screen = pygame.display.set_mode((500, 500))
running = True
x = 50
y = 50
clock = pygame.time.Clock()
while running:
clock.tick(60)
screen.fill((0, 255, 0))
pygame.draw.rect(screen, (255,0,0), (x, y, 30, 30))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_d:
x += 5
if event.key == pygame.K_a:
x -= 5
if event.key == pygame.K_s:`enter code here`
y += 5
if event.key == pygame.K_w:
y -= 5
pygame.display.update()
尝试使用 w、a、s、d 键移动我的第二个精灵,但它似乎不起作用。当我将 pygame.K_d 更改为 pygame.K_RIGHT 时,它正常工作。想知道是我的代码有误还是键盘有误。非常感谢。
这是Indentation的事情。该事件需要在事件循环中进行评估:
while running:
clock.tick(60)
screen.fill((0, 255, 0))
pygame.draw.rect(screen, (255,0,0), (x, y, 30, 30))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# INDENTATION
#-->|
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_d:
x += 5
if event.key == pygame.K_a:
x -= 5
if event.key == pygame.K_s:`enter code here`
y += 5
if event.key == pygame.K_w:
y -= 5
pygame.display.update()
但是,键盘事件(参见 pygame.event 模块)仅在按键状态更改时发生一次。 KEYDOWN
事件在每次按下一个键时发生一次。 KEYUP
每松开一个键就会出现一次。使用键盘事件进行单个操作或逐步移动。
如果要实现连续运动,就得用pygame.key.get_pressed()
。 pygame.key.get_pressed()
returns a list with the state of each key. If a key is held down, the state for the key is True
, otherwise False
. Use pygame.key.get_pressed()
评估按钮的当前状态并获得连续移动:
while running:
clock.tick(60)
screen.fill((0, 255, 0))
pygame.draw.rect(screen, (255,0,0), (x, y, 30, 30))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_d]:
x += 5
if keys[pygame.K_a]:
x -= 5
if keys[pygame.K_s]:
y += 5
if keys[pygame.K_w]
y -= 5
pygame.display.update()
import pygame
pygame.init()
screen = pygame.display.set_mode((500, 500))
running = True
x = 50
y = 50
clock = pygame.time.Clock()
while running:
clock.tick(60)
screen.fill((0, 255, 0))
pygame.draw.rect(screen, (255,0,0), (x, y, 30, 30))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_d:
x += 5
if event.key == pygame.K_a:
x -= 5
if event.key == pygame.K_s:`enter code here`
y += 5
if event.key == pygame.K_w:
y -= 5
pygame.display.update()
尝试使用 w、a、s、d 键移动我的第二个精灵,但它似乎不起作用。当我将 pygame.K_d 更改为 pygame.K_RIGHT 时,它正常工作。想知道是我的代码有误还是键盘有误。非常感谢。
这是Indentation的事情。该事件需要在事件循环中进行评估:
while running:
clock.tick(60)
screen.fill((0, 255, 0))
pygame.draw.rect(screen, (255,0,0), (x, y, 30, 30))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# INDENTATION
#-->|
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_d:
x += 5
if event.key == pygame.K_a:
x -= 5
if event.key == pygame.K_s:`enter code here`
y += 5
if event.key == pygame.K_w:
y -= 5
pygame.display.update()
但是,键盘事件(参见 pygame.event 模块)仅在按键状态更改时发生一次。 KEYDOWN
事件在每次按下一个键时发生一次。 KEYUP
每松开一个键就会出现一次。使用键盘事件进行单个操作或逐步移动。
如果要实现连续运动,就得用pygame.key.get_pressed()
。 pygame.key.get_pressed()
returns a list with the state of each key. If a key is held down, the state for the key is True
, otherwise False
. Use pygame.key.get_pressed()
评估按钮的当前状态并获得连续移动:
while running:
clock.tick(60)
screen.fill((0, 255, 0))
pygame.draw.rect(screen, (255,0,0), (x, y, 30, 30))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_d]:
x += 5
if keys[pygame.K_a]:
x -= 5
if keys[pygame.K_s]:
y += 5
if keys[pygame.K_w]
y -= 5
pygame.display.update()