iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >pygame实现键盘和鼠标事件的处理
  • 290
分享到

pygame实现键盘和鼠标事件的处理

2024-04-02 19:04:59 290人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

所谓事件,就是程序上发生的事。例如用户按下键盘上的某个键或者单击、移动鼠标,对于这些事件,游戏程序需要作出反应。如《 pygame 图像/图形绘制》中例子,程序会一直运行下去,直到用

所谓事件,就是程序上发生的事。例如用户按下键盘上的某个键或者单击、移动鼠标,对于这些事件,游戏程序需要作出反应。如《 pygame 图像/图形绘制》中例子,程序会一直运行下去,直到用户关闭窗口而产生一个 QUIT 事件,pygame 会接收用户的各种操作(例如按键盘上的键、移动鼠标等)产生事件。事件随时可能发生,而且量可能会很大,pygame 的做法是把一系列的事件存放到一个队列里逐个处理。

在上节例子中使用了 pygame.event.get() 来处理所有事件,如果使用 pygame.event.wait() , pygame 会等到发生一个事件时才继续下去,一般在游戏中不太实用,因为游戏往往是需要动态运作的。pygame 的常用事件如下所示:

事件 产生途径 参数
QUIT 用户按下“关闭”按钮 None
ACTIVEEVENT pygame 被激活或者隐藏 gain 、state
KEYDOWN 键盘被按下 unicode 、key 、mod
KEYUP 键盘被放开 key 、mod
MOUSEMOTioN 鼠标移动 pos 、rel 、buttons
MOUSEBUTTONDOWN 鼠标被按下 pos 、button
MOUSEBUTTONUP 鼠标被放开 pos 、button

1. pygame 的键盘事件的处理

通常用 pyagme.event.get() 获取所有事件,若 event.type == KEYDOWN , 这时是键盘事件,再判断按键的 event.key 的种类(即 K_a 、 K_b 、 K_LEFT 这种形式)。用户也可以使用 pygame.key.get_pressed() 来获取所有被按下的键值,对应的就是键是否被按下。


keys_pressed = pygame.key.get_pressed()
if keys_pressed[K_SPACE]:
  # 空格键被按下
  fire()      # 发射子弹

在 key 模块下有很多函数,如下:

  • key.get_focused(): 返回当前的 pygame 窗口是否被激活。
  • key.get_pressed(): 获得所有被按下的键值。
  • key.get_mods(): 按下的组合键(Alt 、Ctrl 、Shift)。
  • key.set_mods(): 模拟按下组合键的效果(KMOD_ALT 、 KMOD_CTRL 、 KMOD_SHIFT)。

使用 pygame 开发一个由用户控制坦克移动的游戏。在上节例子的基础上增加通过方向键控制坦克移动的功能,并为游戏增加背景图片。代码如下:


import pygame
def tank_play():
  pygame,inite()
  tank_image = pygame.image.load("../images/tank.png")
  tank_rect = tank_image.get_rect()
  back_image = pygame.iamge.load("../images/background2.jpg")
  back_rect = back_image.get_rect()
  screen = pygame.display.set_mode(back_rect.size)
  pygame.display.set_caption("用户方向键控制移动的坦克")
  offset = 2   # 偏移量
  fps_clock = pygame.time.Clock()
  while True:
    fps_clock.tick(60)
    for event in pygame.event.get():
      if event.type == pygame.QUIT:
        pygame.quit()
        exit()
    keys_pressed = pygame.key.get_presssed()
    if keys_pressed[pygame.K_RIGHT]:
      tank_rect.x += offset
    if keys_pressed[pygame.K_LEFT]:
      tank_rect.x -= offset
    if keys_pressed[oygame.K_UP]:
      tank_rect.y -= offset
    if keys_pressed[pygame.K_DOWN]:
      tank_rect.y += offset
    tank_rect.clamp_ip(back_rect)
    screen.blit(back_image, back_rect)
    screen.blit(tank_image, tank_rect)
    pygame.display.update()
      
if __name__ == '__main--':
  tank_play()

当用户按下方向键时坦克按指定方向移动,释放方向键时坦克停止移动。如下所示:

2. pygame 的鼠标事件的处理

pygame.mouse 的函数如下:

  • pygame.mouse.get_pressed(): 返回按键的按下情况,返回的是一元组,分别为左键、中键、右键,如果被按下则为 True 。
  • pygame.mouse.get_rel(): 返回相对偏移量,即(x 方向偏移量,y 方向偏移量)的一元组。
  • pygame.mouse.get_pos(): 返回当前鼠标位置(x, y)。

例如:x, y = pygame.mouse.get_pos() 用于获取鼠标位置。

  • pygame.mouse.set_pos(): 设置鼠标位置。
  • pygame.mouse.set_visible(): 设置鼠标光标是否可见。
  • pygame.mouse.get_focused(): 如果鼠标在 pygame 窗口内有效,返回 True 。
  • pygame.mouse.set_cursor(): 设置鼠标的默认光标样式。
  • pygame.mouse.get_cursor(): 返回鼠标的光标样式。

演示鼠标事件的处理程序,代码如下:


from math import pi
from random import randint
import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
points = []
while True:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      pygame.quit()
      exit()
  	if event.type == pygame.KEYDOWN:
      # 按任意键可清屏,并把点恢复到原始状态
      points = []
      srceen.fill((255, 255, 255))   # 用白色填充窗口背景
    if event.type == pygame.MOUSEBUTTONDOWN:	# 鼠标按下
      screen.fill((255, 255, 255))
      # 画随机矩形
      rc = (255, 0, 0)	# 红色
      rp = (randint(0, 639), randint(0, 479))
      rs = (639 - randint(rp[0], 639), 479 - randint(rp[1], 479))
      pygame.draw.rect(screen, rc, pygame.Rect(rp, rs))
      # 画随机圆形
      rc = (0, 255, 0)	# 绿色
      rp = (randint(0, 639), randint(0, 479))
      rr = randint(1, 200)
      pygame.draw.circle(screen, rc, rp, rr)
      # 获取当前鼠标单击位置
      x, y = pygame.mouse.get_pos()
      points.append((x, y))
      # 根据单击位置画弧线
      angle = (x / 639) * pi * 2
      pygame.draw.arc(screen, (0, 0, 0), (0, 0, 639, 479), 0, angle, 3)
      # 根据单击位置画椭圆
      pygame.draw.ellipse(screen, (0, 255, 0), (0, 0, x, y))
      # 从左上和右下画两根连线到单击位置
      pygame.draw.line(screen, (0, 0, 255), (0, 0), (x, y))
      pygame.draw.line(screen, (255, 0, 0), (640, 480), (x, y))
      # 画单击轨迹图
      if len(points) > 1:
        pygame.draw.lines(screen, (155, 155, 0), points, False, 2)
      # 把鼠标单击的每个点画明显点
      for p in points:
        pygame.draw.circle(screen, (155, 155, 155), p, 3)
	pygame.display.update()

运行这个程序,在窗口上单击鼠标就会有图形出来,按键盘上任意键可清屏重新开始。如下:

到此这篇关于pygame实现键盘和鼠标事件的处理的文章就介绍到这了,更多相关pygame 键盘和鼠标事件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: pygame实现键盘和鼠标事件的处理

本文链接: https://www.lsjlt.com/news/121940.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • pygame实现键盘和鼠标事件的处理
    所谓事件,就是程序上发生的事。例如用户按下键盘上的某个键或者单击、移动鼠标,对于这些事件,游戏程序需要作出反应。如《 pygame 图像/图形绘制》中例子,程序会一直运行下去,直到用...
    99+
    2022-11-11
  • 怎么在pygame中对键盘和鼠标事件进行处理
    本篇文章为大家展示了怎么在pygame中对键盘和鼠标事件进行处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。pygame 的常用事件如下所示:事件产生途径参数QUIT用户按下“关闭”按钮NoneA...
    99+
    2023-06-14
  • pygame键盘事件如何实现
    这篇文章主要介绍了pygame键盘事件如何实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Pygame事件pygame.event.EventType''&...
    99+
    2023-06-25
  • JavaScript中的键盘、鼠标事件怎么实现
    本文小编为大家详细介绍“JavaScript中的键盘、鼠标事件怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript中的键盘、鼠标事件怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思...
    99+
    2022-10-19
  • pygame 键盘事件的实践
    目录Pygame事件事件类型及属性事件处理函数键盘事件及类型的使用键盘事件及属性什么是事件呢?按下键盘某个按键,鼠标移动,包括点击关闭按钮都可以算是事件操作。 Pygame事件 ...
    99+
    2022-11-12
  • 用Python监听鼠标和键盘事件
    最近有点想法,想自己写点小软件,看到网上有篇博客是我想要的,这里记录下。 原文地址:点击打开链接   发现他也是转载的,真正的原文出处是: 点击打开链接    只是记得不够详细环境搭建等问题,我也搞了差不多10多分钟才把环境搭建好,环境...
    99+
    2023-01-31
    鼠标 键盘 事件
  • Python中pygame的mouse鼠标事件用法实例
    本文实例讲述了Python中pygame的mouse鼠标事件用法。分享给大家供大家参考,具体如下: pygame.mouse提供了一些方法获取鼠标设备当前的状态 ''' pygame.mouse.get...
    99+
    2022-06-04
    鼠标 实例 事件
  • HTML5 Canvas鼠标与键盘事件demo的示例分析
    本篇文章给大家分享的是有关HTML5 Canvas鼠标与键盘事件demo的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 ...
    99+
    2022-10-19
  • Python selenium的基本元素与键盘鼠标模拟事件实例分析
    本篇内容主要讲解“Python selenium的基本元素与键盘鼠标模拟事件实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python selenium的基本元素与键盘鼠标模拟事件实例分...
    99+
    2023-07-02
  • Python实战解析selenium的基本元素与键盘鼠标模拟事件
    本篇文章给大家带来了关于python的相关知识,其中主要介绍了关于selenium的基本元素与键盘鼠标模拟事件的相关问题,包括了利用 Keys 模块模拟键盘操作事件、用 Action 类模拟鼠标操作事件等,下面一起来看一下,希望对大家有帮助...
    99+
    2022-06-14
    python
  • pygame多种方式实现屏保操作(自动切换、鼠标切换、键盘切换)
    目录一、图片处理(一)图片采集(二)图片装载(三)完整代码二、初始化pygame相关参数(一)设置初始化参数(二)设置为全屏显示:三、核心模块(一)自动切换(二)键盘切换(三)鼠标切...
    99+
    2022-11-12
  • ECharts鼠标事件的处理方法详解
    事件是用户或浏览器自身执行的某种动作,如click、mouseover、页面加载完毕后触发load事件,都属于事件。 为了记录用户的操作和行为路径,需要完成鼠标事件处理和组件交互的行...
    99+
    2022-11-12
  • 详解OpenCV中简单的鼠标事件处理
    目录cv2.setMouseCallback函数语法 回调函数  谈及鼠标事件,就是在触发鼠标按钮后程序所做出相应的反应,但是不影响程序的整个线程。这有...
    99+
    2022-11-12
  • C#鼠标事件的处理机制是什么
    本篇内容介绍了“C#鼠标事件的处理机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#鼠标事件包括鼠标的很多操作,比如为用户提供鼠标...
    99+
    2023-06-17
  • WPF中鼠标/键盘/拖拽事件及用行为封装事件的方法是什么
    这篇“WPF中鼠标/键盘/拖拽事件及用行为封装事件的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“WPF中鼠标/键...
    99+
    2023-07-05
  • android 键盘事件和屏幕事件的运行原理及交互实现
    当在自定义View或者做游戏的时候,我们常常会用到键盘触发事件和屏幕触发事件!在自定义的View里的键盘触发事件(比如:onKeyDown(int keyCode, KeyEv...
    99+
    2022-06-06
    键盘事件 运行 事件 Android
  • 如何实现在Linux下锁住键盘和鼠标而不锁屏
    这期内容当中小编将会给大家带来有关如何实现在Linux下锁住键盘和鼠标而不锁屏,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。假如在你正看着屏幕上的某些重要的事情时,你不想让你的小猫或者小狗在你的键盘上行走...
    99+
    2023-06-06
  • JavaScript 键盘事件的处理及属性详解
    目录引言处理键盘事件键盘事件属性 引言 JavaScript 中的事件,当用户或浏览器尝试操作页面时,就会发生事件来处理 JavaScript 与HTML的交互。正如大家所知,Ja...
    99+
    2023-01-28
    JavaScript 键盘事件 JavaScript 键盘事件属性
  • 如何实现鼠标滚轮事件和Mac触控板双指事件
    小编给大家分享一下如何实现鼠标滚轮事件和Mac触控板双指事件,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. 用哪个事件The wheel event fires when the us...
    99+
    2022-10-19
  • Angularjs如何实现键盘事件的绑定
    这篇文章主要介绍了Angularjs如何实现键盘事件的绑定,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法一:ng内置指令<butt...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作