如果我想根据 pygame 中的键输入移动精灵,是否有编写代码所以如果我按住一个键,精灵将继续朝那个方向移动,直到我释放键?我已经尝试过了,要么程序崩溃,要么我必须反复敲击键才能将精灵移动到预期的方向。
问问题
3473 次
3 回答
5
OP 想要 keystate 轮询,而不是KEYDOWN
事件。
此示例显示同时使用键事件和键轮询。您将一个用于“按键按下”,另一个用于“按住时”。
import pygame
from pygame.locals import *
done = False
player.pos = Rect(0,0,10,10)
while not done:
for event in pygame.event.get():
# any other key event input
if event.type == QUIT:
done = True
elif event.type == KEYDOWN:
if event.key == K_ESC:
done = True
# get key current state
keys = pygame.key.get_pressed()
if keys[K_LEFT]:
player.pos.left -= 10
if keys[K_RIGHT]:
player.pos.left += 10
if keys[K_UP]:
player.pos.top -= 10
if keys[K_DOWN]:
player.pos.left += 10
if keys[K_SPACE]:
print 'firing gun'
于 2012-11-03T08:45:47.623 回答
0
作为概述,
- 监听
KEYDOWN
pygame 消息队列中的事件。 - 检查您感兴趣的键是否被按下。
- 朝那个方向前进
- 检查消息队列以查找
KEYUP
与您的密钥匹配的事件。 - 别动了。
阅读有关如何实现此功能的文档。
于 2012-11-03T04:18:30.460 回答
0
您通常在更新方法中使用一个移动函数,如下所示:
this.pos_x = direction * speed * delta
现在在您的 KEYDOWN 事件中,您将方向设置为 1 或 -1,在 KEYUP 中将其设置回 0。这样您就有了一个很好的持续运动。
于 2012-11-03T15:06:29.810 回答