只要在键盘上按下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
?
答案 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
!