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_TAB Tab
K_CLEAR Clear
K_RETURN Return (Enter)
K_ESCAPE Escape (Esc)
K_SPACE 空格键
K_PLUS plus sign ( + )
K_MINUS minus sign ( – )
K_PERIOD period ( . )
K_SLASH forward slash
K_UP Up Key
K_DOWN Down Key
K_LEFT Left Key
K_RIGHT Right Key
K_0 0
K_1 1
K_2 2
K_3 3
K_4 4
K_5 5
K_6 6
K_7 7
K_8 8
K_9 9
K a a
K_b b
K_c c
K_y y
K_z z
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_F1 F1
K_F2 F2
K_F3 F3
K_F14 F14
K_F15 F15
K_RSHIFT 右SHIFT键
K_K_LSHIFT 左SHIFT键
K_RCLTRL 右CTRL键
K_LCTRL 左CTRL键
K_RALT 右ALT键
K_LALT 左ALT键

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

猜你喜欢

转载自blog.csdn.net/qq_67984864/article/details/128930180