Pygame 键盘输入

4.Pygame 键盘输入

所有的游戏都需要玩家与它进行互动体验。这种体验的第一步是获取用户的输入,并使用此输入以来影响游戏世界。

这方面的常见示例是用于移动角色的箭头键、用于各种攻击 (RPG) 的不同键或您使用鼠标选择的不同对话选项等。

介绍

Pygame 跟踪发生的“事件”,我们可以通过events.get()函数看到这些事件。有很多东西可以归类为事件,例如鼠标和键盘输入或窗口上的退出按钮。

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

以上代码是每个 pygame 程序中包含的标准事件检查。

检测键盘输入事件

在游戏循环中监听键盘输入事件:

  1. 监听所有事件 pygame.event.get()
  2. 检测是否有键盘按下
  3. 判断预定的键值
while True:
    # 循环遍历事件列表
    for event in pygame.event.get():
           
          # 判断是否有键按下 
          if event.type == pygame.KEYDOWN:
              
              if event.key == pygame.K_m:
                 print("键发射火球")
 
              if event.key == pygame.K_n:
                  handler.next_stage()
 
              if event.key == pygame.K_q:
                  handler.interact()
 
              if event.key == pygame.K_SPACE:
                 print("键跳跃")
 
              if event.key == pygame.K_RETURN:
                  print("键攻击")

如果你想在你的代码中添加按键处理,上面的格式是一种万无一失的方法。您还可以使用该pygame.KEYUP事件,该事件在您释放按键时触发。

这是您可以在您的系统上运行的完整代码,它同时使用了KEYDOWN和KEYUP.

import pygame
from pygame.locals import *
import sys
 
pygame.init()
display = pygame.display.set_mode((300, 300))
 
while 1:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_a:
                print("a键按下")
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_a:
                print("a键释放")

检测按下的键

上述方法仅适用于单击按钮。只需单击一次或按住几秒钟都没有关系。它会产生同样的效果。这里要讨论的方法,是针对“按下”键输入的。

我们使用该get_pressed()函数返回所有键状态的列表。如果未按下该键,则其值为 0,否则为 1。以下代码中的 if 语句仅在键的状态为 1(按下)时激活。

while 1:
    pressed_keys = pygame.key.get_pressed()
 
    if pressed_keys[K_a]:
        print("A被按下")

您会发现这种方法更适合许多游戏中的 Player 移动。不同的是,只要你按下“A”键,上面的打印语句就会继续打印,因为它正在检测连续输入。以前的方法只会激活它一次。

检测多键输入
这里的另一个很棒的功能是它可以同时检测到两个按键。你不能用第一种方法做的事情。

pressed_keys = pygame.key.get_pressed()
 
if pressed_keys[K_a] and pressed_keys[K_b]:
    print("A,B被按下")

更多关于 Pygame 事件

键盘事件在启用其他很酷的功能方面发挥着重要作用,例如文本输入、玩家移动和其他快捷方式(打开库存)。

用户事件:创建的自定义 Pygame 事件。

常用键列表

总共可能有超过 100 个 Pygame 可以检测到的不同键。为了简洁起见,我们将坚持使用大约 50 个常用的。

Pygame 键按键说明
K_K_BACKSPACE退格键
K_TABTab
K_CLEARClear
K_RETURNReturn (Enter)
K_ESCAPEEscape (Esc)
K_SPACE空格键
K_PLUSplus sign ( + )
K_MINUSminus sign ( – )
K_PERIODperiod ( . )
K_SLASHforward slash
K_UPUp Key
K_DOWNDown Key
K_LEFTLeft Key
K_RIGHTRight Key
K_00
K_11
K_22
K_33
K_44
K_55
K_66
K_77
K_88
K_99
K aa
K_bb
K_cc
K_yy
K_zz
K_DELETE
K_KP0(Keypad) 0
K_KP1(Keypad) 1
K_KP2(Keypad) 2
K_KP3(Keypad) 3
K_KP4(Keypad) 4
K_KP5(Keypad) 5
K_KP6(Keypad) 6
K_KP7(Keypad) 7
K_KP8(Keypad) 8
K_KP9(Keypad) 9
K_F1F1
K_F2F2
K_F3F3
K_F14F14
K_F15F15
K_RSHIFT右SHIFT键
K_K_LSHIFT左SHIFT键
K_RCLTRL右CTRL键
K_LCTRL左CTRL键
K_RALT右ALT键
K_LALT左ALT键

还有其他几个(不太常见的)键输入,例如您在完整的 pygame"keys”文档中找到的星号。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值