Python学习笔记39:进阶篇(二十八)pygame的使用之按键映射及按键失效问题解决

前言

基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。

我们的下一步目标是完成python crash course中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame模块。

私信我发送消息python资料,领取python crash course中文版PDF。

pygame

Pygame是一个开源的Python多媒体开发库,专门用于开发2D游戏。它是Python编程语言的一个扩展,基于 SDL (Simple DirectMedia Layer) 库,提供了丰富的功能来处理图形、声音、事件处理等游戏开发所需的基本要素,使得创建游戏变得更加简单直接。

按键映射

在pygame中,键盘事件通常通过pygame.KEYDOWN和pygame.KEYUP事件来检测。每个按键都有一个对应的常量,这些常量定义在pygame.localspygame.constants模块中(通常直接导入*以访问)。

这里提供一些按键映射的信息:

  • K_UP, K_DOWN, K_LEFT, K_RIGHT - 方向键
  • K_a, K_b, K_c, … - 字母键
  • K_0, K_1, K_2, … - 数字键
  • K_RETURN - 回车键
  • K_SPACE - 空格键
  • K_BACKSPACE - 退格键
  • K_TAB - 制表符键
  • K_F1, K_F2, …, K_F12 - 功能键
  • K_KP0, K_KP1, …, K_KP9 - 小键盘数字键
  • K_KP_PERIOD, K_KP_DIVIDE, K_KP_MULTIPLY, K_KP_MINUS, K_KP_PLUS, K_KP_ENTER - 小键盘运算键和回车键
  • K_RCTRL, K_LCTRL - 右Ctrl键和左Ctrl键
  • K_RALT, K_LALT - 右Alt键和左Alt键
  • K_RSHIFT, K_LSHIFT - 右Shift键和左Shift键
  • K_NUMLOCK - 数字键盘锁定键
  • K_CAPSLOCK - 大写字母锁定键
  • K_SCROLLOCK - 滚动锁定键
  • K_INSERT - 插入键
  • K_DELETE - 删除键
  • K_HOME - Home键
  • K_END - End键
  • K_PAGEUP - Page Up键
  • K_PAGEDOWN - Page Down键
  • K_PRINT - Print Screen键
  • K_PAUSE - Pause键
  • K_F15 - F15键(某些系统可能没有这个键)
  • K_F16, K_F17, K_F18, K_F19, K_F20 - 额外的功能键(如果存在)

以上就是键盘按键对应pygame中的常量值,在判定某些特定按键按下时,可以使用对应的变量进行判断。

import sys
import pygame
from pygame.locals import *

# 初始化pygame
pygame.init()

# 创建一个窗口
screen = pygame.display.set_mode((640, 480))
pygame.key.stop_text_input()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == KEYDOWN:  # 如果有按键被按下
            if event.key == K_ESCAPE:  # 如果按下的是ESC键
                pygame.quit()
                sys.exit()
            elif event.key == K_UP:  # 如果按下的是上箭头
                print("Up arrow key pressed.")
            elif event.key == K_DOWN:  # 如果按下的是下箭头
                print("Down arrow key pressed.")
            elif event.key == K_LEFT:  # 如果按下的是左箭头
                print("Left arrow key pressed.")
            elif event.key == K_RIGHT:  # 如果按下的是右箭头
                print("Right arrow key pressed.")
            elif event.key == K_a:  # 如果按下的是A键
                print("A key pressed.")
            elif event.key == K_b:  # 如果按下的是B键
                print("B key pressed.")

简单写了一个示例,这里需要注意的是当你开启窗口的时候,输入ab等字符的时候,程序无法识别,并且后续你按方向键也不在响应了。

原因就是pygame启动打开窗口后,你的输入模式会变成文本输入模式,这个时候你按键ABC无法被识别。

有三个方法解决:
1. 按shift切换英文;
2. 按CAPSLOCK设置大写;
3. pygame.key.stop_text_input(),创建窗口以后调用此函数,停止文本输入模式,这个时候你的按键就会变成单独的按键事件被pygame处理。

结尾

今天的记录主要是补充之前说的按键映射以及按键时的一个小问题。

这已经是pygame学习的最后一篇了,接下来就要开始外星人入侵的小游戏代码编写了。

加油!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值