当前位置: 移动技术网 > IT编程>脚本编程>Python > 荐 Pygame鼠标事件检测

荐 Pygame鼠标事件检测

2020年07月12日  | 移动技术网IT编程  | 我要评论

本节视频

【零基础 Python体验课】第四季 pygame游戏开发

Event事件检测——鼠标

按下一个键,点一下鼠标,都是事件,一个游戏中需要很多事件,比如点击一下屏幕,就是一个事件,鼠标的滑动,也是事件,于是我们需要在死循环中侦测事件的发生去处理。

首先先不处理,先说说怎么检测事件,游戏最小系统中的pygame.QUIT是一个点击关闭按钮的事件,是在for循环中检测到的,for循环检测原理是让循环变量event在每次检测到的事件列表(即pygame.event.get())中遍历。于是把遍历到的事件(即event)都输出,看看结果。

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

这是死循环部分,运行,结果说不清楚,看动图

在这里插入图片描述
诶?为什么看不见鼠标指针,啥子回事?反正看后面的解释吧

发现鼠标移动能触发很多事件,pos是坐标,按下鼠标左键或右键,会触发两个事件,按下和抬起,键盘也是按下和抬起,按键会多一个ascll参数。把这个程序保存为一个工具,如果你需要什么事件的名字,拿起这个程序实验就知道了。

鼠标事件

  • MOUSEMOTION:鼠标移动
  • MOUSEBUTTONDOWN:鼠标按下
  • MOUSEBUTTONUP:鼠标抬起
  • 返回鼠标位置:event.pos

我们实验鼠标按下出现一个球,松开球跟着也消失,所以需要探测两个事件,一个是鼠标按下,一个是鼠标抬起,代码实现很简单

for event in pygame.event.get():
    # print(event)
    if event.type == pygame.QUIT:
        exit()
    elif event.type == pygame.MOUSEBUTTONDOWN:
        pygame.draw.circle(window, (255, 255, 0), (x, y), r)
        pygame.display.update()
    elif event.type == pygame.MOUSEBUTTONUP:
        pygame.draw.circle(window, (255, 255, 255), (x, y), r)
        pygame.display.update()
    # elif event.type == pygame.MOUSEBUTTONDOWN:
    #     print("鼠标按下 ", event.pos)

可以实现,于是需要进阶,做一个可以拖拽的小球?按下鼠标并拖拽松开小球消失。这时候需要一个标记变量,在按下的时候标记为True,抬起标记为False,判断MOUSEMOTION的时候看看标记,如果是True,就可以拖拽,如果为False就不能,让小球跟着鼠标动起来的原理也很简单,首先用白色覆盖上一次画的球,再将临时坐标等于鼠标事件坐标(即event.pos),重新画圆,记住每次更改界面都需要刷新屏幕pygame.display.update()

如何获取鼠标事件坐标,获取鼠标坐标的方法叫做pos,完整使用方法

while True:
    for event in pygame.event.get():
        if event.type == pygame.MOUSEMOTION:
            print(event.pos) # 当前在屏幕中的坐标

这次贴出完整代码

import pygame

WIN_WIDTH = 400
WIN_HEIGHT = 600
pygame.init()
window = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
pygame.display.set_caption("事件检测")
titlelineico = pygame.image.load("img/airplane.ico")  # 导入窗口图标,规格:32x32,格式:.ico
pygame.display.set_icon(titlelineico)  # 设置窗口图标
window.fill((255, 255, 255))
pygame.display.flip()
y = 200
x = 200
r = 50
flag = False
while True:
    for event in pygame.event.get():
        # print(event)
        if event.type == pygame.QUIT:
            exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            flag = True
            pygame.draw.circle(window, (255, 255, 0), (x, y), r)
            pygame.display.update()
        elif event.type == pygame.MOUSEBUTTONUP:
            flag = False
            pygame.draw.circle(window, (255, 255, 255), (x, y), r)
            pygame.display.update()
        if event.type == pygame.MOUSEMOTION and flag:
            pygame.draw.circle(window, (255, 255, 255), (x, y), r)
            print(event, flag)
            x, y = event.pos
            pygame.draw.circle(window, (255, 255, 0), (x, y), r)
            pygame.display.update()
        # elif event.type == pygame.MOUSEBUTTONDOWN:
        #     print("鼠标按下 ", event.pos)

        # 491 <Event(2-KeyDown {'unicode': '', 'key': 273, 'mod': 0, 'scancode': 72, 'window': None})>
        # 492 <Event(3-KeyUp {'key': 273, 'mod': 0, 'scancode': 72, 'window': None})>
        # 493 <Event(2-KeyDown {'unicode': '', 'key': 274, 'mod': 0, 'scancode': 80, 'window': None})>
        # 494 <Event(3-KeyUp {'key': 274, 'mod': 0, 'scancode': 80, 'window': None})>

在这里插入图片描述

下一节讲键盘的事件

本文地址:https://blog.csdn.net/cool99781/article/details/107285247

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网