只要按下按键,如何让游戏对象连续移动?

时间:2015-10-21 08:49:10

标签: python python-2.7 pygame

只要在键盘上按下object,我就会尝试制作游戏key(此处为欢迎文字)。但是在我的这段代码中,

import pygame , sys
from pygame.locals import *

pygame.init()

WHITE = (255 , 255 , 255)
RED   = (255 , 0 , 0)

DISPLAYSURF = pygame.display.set_mode((800 , 400))
pygame.display.set_caption('Welcome Tanks')

#render(text, antialias, color, background=None)
fontObj = pygame.font.SysFont('serif' , 40)
text = fontObj.render('Welcome Folks' , True , RED )

x = 150
y = 29

while True:
    DISPLAYSURF.fill(WHITE)
    DISPLAYSURF.blit(text ,(x , y))   
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit(0)
        elif event.type == KEYDOWN or event.type == KEYUP:
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit(0)
            elif event.key == K_DOWN:               
                y += 15
            elif event.key == K_UP:
                y -= 15
            elif event.key == K_RIGHT:
                x += 14
            elif event.key == K_LEFT:
                x -= 15
            else:
                x = 150
                y = 29
    pygame.display.update()

即使key长时间持续按下,对象也只会移动一次。换句话说,当按下键盘按钮时,对象仅改变其位置一次。我希望它在我握住钥匙的同时不断移动。

我应该寻找哪个事件而不是event.KEYDOWN

2 个答案:

答案 0 :(得分:2)

我建议您使用key.get_pressed(),例如

while True:
    DISPLAYSURF.fill(WHITE)
    DISPLAYSURF.blit(text ,(x , y))   
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit(0)
        elif event.type == KEYDOWN or event.type == KEYUP:
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit(0)

    if  pygame.key.get_pressed()[K_LEFT]:
        x -= 15

    if  pygame.key.get_pressed()[K_RIGHT]:
        x += 14

    if  pygame.key.get_pressed()[K_UP]:
        y -= 15

    if  pygame.key.get_pressed()[K_DOWN]:
        y += 15
    pygame.display.update()

<强> pygame.key.get_pressed()

  

返回表示每个状态的布尔值序列   键盘上的键。使用键常量值来索引数组。一个   真值表示按下该按钮。

     

使用此功能获取按下的按钮列表不是   处理用户文本输入的正确方法。你无从知晓   按下的按键顺序,快速按键可以完全按下   两次调用pygame.key.get_pressed()之间没有注意到。还有   无法将这些推送的密钥翻译成完全翻译的密钥   人物价值。请参阅事件队列中的pygame.KEYDOWN事件   这个功能。

您也可以查看doc

答案 1 :(得分:2)

 keyState = pygame.key.get_pressed()

声明,然后使用keystate:

 if KeyState()[K_DOWN]:
         y += 15

你可以尝试:

if key.get_pressed()
    down = True

while down = True:
    y+= 15

然后获取FPS时钟,使其不仅仅流过screen