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

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

时间:2024-07-20 21:27:00浏览次数:20  
标签:39 Python elif 按下 pygame key 按键 event

前言

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

我们的下一步目标是完成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学习的最后一篇了,接下来就要开始外星人入侵的小游戏代码编写了。

加油!!!

标签:39,Python,elif,按下,pygame,key,按键,event
From: https://blog.csdn.net/weixin_48668564/article/details/140503404

相关文章

  • Python学习笔记40:游戏篇之外星人入侵(一)
    前言入门知识已经学完,常用标准库也了解了,pygame入门知识也学了,那么开始尝试小游戏的开发。当然这个小游戏属于比较简单的小游戏,复杂的游戏需要长时间的编写累计开发经验,同时也需要一定的时间才能编写出来。现在的话还是嫩了点。从基础的简单的开始,学习实践,慢慢的成长才......
  • Python学习笔记37:进阶篇(二十六)pygame的使用之输入处理
    前言基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。我们的下一步目标是完成pythoncrashcourse中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame模块。私信我发送消息python资料,......
  • Python学习笔记38:进阶篇(二十七)pygame的使用之时间与帧数控制
    前言基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。我们的下一步目标是完成pythoncrashcourse中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame模块。私信我发送消息python资料,......
  • 音频文件降噪及python示例
    操作系统:Windows10_x64Python版本:3.9.2noisereduce版本:3.0.2从事音频相关工作,大概率会碰到降噪问题,今天整理下之前学习音频文件降噪的笔记,并提供Audacity和python示例。我将从以下几个方面展开:noisereduce库介绍使用Audacity进行降噪使用fft滤波降噪使用noisereduce进......
  • Python; Django 添加字符到路径名导致操作系统错误 22
    我一直在尝试让django渲染我创建的模板。起初它说模板不存在,但是一旦我修复了错误,它现在就会向路径添加字符,并且因此找不到模板。路径应该是:C:\\Users\\ABC\\Desktop\\science_crowd\\Lightweight_Django\\placeholder\\home.html但是错误说:它找不到:C:\\Us......
  • 如何在 IPython 控制台中显示 conda 环境名称?
    上下文我想在Spyder的IPython控制台中显示conda环境名称,这样我就知道我正在运行哪个环境。虽然此信息在状态栏中可用,但有时只是显示|||而不是实际的环境名称:conda我尝试过的在启动时打印它Spyder允许在控制台启动时运行代码。但是,似乎......
  • Python 中更快的套接字
    我有一个用Python编写的服务器客户端,它通过LAN运行。该算法的某些部分密集使用套接字读取,其执行速度比用C++编写的几乎相同的慢3-6倍。有哪些解决方案可以使Python套接字读取速度更快?我实现了一些简单的缓冲,我的用于处理套接字的类如下所示:P.S.:分析还显示......
  • .py文件是python脚本吗
    .py文件是python的脚本文件。Python在执行时,首先会将.py文件中的源代码编译成Python的bytecode(字节码),然后再由PythonVirtualMachine(Python虚拟机)来执行这些编译好的bytecode。这种机制的基本思想跟Java,.NET是一致的。然而,PythonVirtualMachine与Java或.NET的Virtual......
  • anaconda与python是什么关系
    Anaconda是Python的一个发行版,里面内置了很多工具,不用单独安装,因为做了优化也免去了单独安装带来的一些麻烦。Anaconda是一种Python语言的免费增值开源发行版,用于进行大规模数据处理、预测分析,和科学计算,致力于简化包的管理和部署。Anaconda使用软件包管理系统Conda进行包管......
  • 用于检查 Google Gemini 支持的所有 GenerativeAI 模型的 Python 代码是什么?
    作为GenerativeAI世界的新手,我正在尝试加载预先训练的文本生成模型并做一些不起作用的事情。这就是我加载GenerativeAI模型的方式。fromvertexai.generative_modelsimportGenerativeModelgeneration_model=GenerativeModel("gemini-pro")由于它不......