-1

我正在尝试在按下键时移动图像。它移动但不流畅,按下按钮时它不会继续移动。

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()
4

2 回答 2

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
...
于 2013-04-10T06:23:11.777 回答
-4

我认为您必须启用某种重复功能。根据这个(你的)例子

pygame.key.set_repeat(50, 50)

应该做的工作。

引用的解释:

set_repeat()它的两个论点是怎么回事?默认情况下,按键重复功能被禁用,即,当您按住某个键时,默认为无。不会产生任何事件。

set_repeat 的两个参数是延迟和间隔。当您按住一个键时,第一个事件会在延迟毫秒后生成。并且在间隔毫秒之后生成连续事件。

如果这仍然令人困惑,那么这个示例可能会对您有所帮助。考虑一下我拿着向上键。这就是事件生成的样子。

[第 1 次活动]…[第 2 次活动]…[第 3 次活动]…以此类推。

[1st up event] 是按键被按住的地方。并在延迟毫秒后生成 [2nd up event]。然后每隔毫秒生成剩余的事件,直到释放密钥。

于 2013-04-10T02:33:46.937 回答