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)
以实现,于是需要进阶,做一个可以拖拽的小球?按下鼠标并拖拽松开小球消失。外汇经纪商动态https://www.fx61.com/news这时候需要一个标记变量,在按下的时候标记为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
# 492
# 493
# 494
|
|