按下按键使图像移动

时间:2013-04-10 01:15:07

标签: python animation pygame

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

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

2 个答案:

答案 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)

应该做的。

解释this (your) example

  

set_repeat()有什么问题,这是两个论点?默认情况下   键重复功能被禁用,即按下时的默认值   拿一把钥匙什么都没有。不会生成任何事件。

     

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

     

如果这仍然令人困惑,那么此示例可能会对您有所帮助。考虑   我拿着钥匙。这就是事件生成的样子   等。

     

[1st up event] ... [2nd up event] ... [3rd up event] ......等等。

     

[1st up event]是按下并按住键的位置。之后   延迟毫秒产生[第二个上升事件]。然后是   每个间隔毫秒生成剩余事件直到密钥   被释放。