我正在尝试按下按键时移动图像。它移动但不流畅,按下按钮时它不会继续移动。
import pygame, sys
from pygame.locals import *
white=(255,255,255)
black=(0,0,0)
pygame.init()
window=pygame.display.set_mode((640, 360),0,32)
image=pygame.image.load("white.png")
image.set_colorkey(white)
x,y=0,0
movex,movey=0,0
while True:
window.fill(black)
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN:
if event.key==K_LEFT:
movex+=-1
elif event.key==K_RIGHT:
movex+=1
elif event.key==K_UP:
movey+=-1
elif event.key==K_DOWN:
movey+=1
x=movex
y=movey
window.blit(image,(x,y))
pygame.display.update()
答案 0 :(得分:8)
您正在寻找K_DOWN
事件,因此您的图像只会在按下按钮时(或操作系统告诉您的那一刻)移动。
更好的想法是使用pygame.key.get_pressed()
检查主循环的每次迭代是否按下某些键:
...
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
pressed = pygame.key.get_pressed()
if pressed[K_LEFT]:
movex+=-1
if pressed[K_RIGHT]:
movex+=1
if pressed[K_UP]:
movey+=-1
if pressed[K_DOWN]:
movey+=1
x=movex
y=movey
...
答案 1 :(得分:-4)
我认为你必须启用某种重复功能。 根据{{3}},
pygame.key.set_repeat(50, 50)
应该做的。
set_repeat()
有什么问题,这是两个论点?默认情况下 键重复功能被禁用,即按下时的默认值 拿一把钥匙什么都没有。不会生成任何事件。set_repeat的两个参数是delay和interval。当你按下 并按住键,延迟毫秒后生成第一个事件。 并且在间隔之后生成连续事件 毫秒。
如果这仍然令人困惑,那么此示例可能会对您有所帮助。考虑 我拿着钥匙。这就是事件生成的样子 等。
[1st up event] ... [2nd up event] ... [3rd up event] ......等等。
[1st up event]是按下并按住键的位置。之后 延迟毫秒产生[第二个上升事件]。然后是 每个间隔毫秒生成剩余事件直到密钥 被释放。