1

如果我想根据 pygame 中的键输入移动精灵,是否有编写代码所以如果我按住一个键,精灵将继续朝那个方向移动,直到我释放键?我已经尝试过了,要么程序崩溃,要么我必须反复敲击键才能将精灵移动到预期的方向。

4

3 回答 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

作为概述,

  • 监听KEYDOWNpygame 消息队列中的事件。
  • 检查您感兴趣的键是否被按下。
  • 朝那个方向前进
  • 检查消息队列以查找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 回答