Python基础:第019课——窗口缩放事件、最小化状态及处理

视频

观看视频

参考:

  1. pygame事件完整解析
  2. pygame中display模块介绍

创建主窗口及绘制图像

Pygame 使用pygame.display.set_mode创建游戏的主窗口:

screen = pygame.display.set_mode(size=(),flags=0)

上述函数有两个参数常用参数:

size:元组参数,用来设置主窗口的大小

flags:功能标志位,表示创建的主窗口样式,比如创建全屏窗口、无边框窗口等,flags 参数值见下表。

标志位 功能
pygame.FULLSCREEN 创建一个全屏窗口。
pygame.HWSURFACE 创建一个硬件加速窗口,必须和 FULLSCREEN 同时使用。
pygame.OPENGL 创建一个 OPENGL 渲染窗口。
pygame.RESIZABLE 创建一个可以改变大小的窗口。
pygame.DOUBLEBUF 创建一个双缓冲区窗口,建议在HWSURFACE 或者 OPENGL 时使用。
pygame.NOFRAME 创建一个没有边框的窗口。

体验过电脑游戏的朋友们都知道,当运行程序后会在电脑桌面上出现一个游戏的主窗口,这个主窗口的本质是一个 surface 对象,把理解为画布、画板、白纸在合适不过了,它相当于一个载体,用于承载一切游戏所用到的元素。假如您需要将一段文本方放置到主窗口中,那么您需要先创建一个包含文本的 surface 对象,之后再将它附加到主窗口上。

主窗口(screen)相当于游戏程序中尺寸最大的 Surface 对象,在这个最大的“画布”中,我们还可以添加其他“小”的 Surface 对象,这些对象以矩形的形式存在于主窗口中,它们共同组成了一个游戏程序。通过下列方法可以将一个 Surface 对象粘贴至主窗口上:

scrren.blit(source, dest, area=None, special_flags = 0)

下面对上述参数做简单的介绍:

source:表示要粘贴的 Surface 对象。

dest:主窗口中的一个标识的坐标位置,可以接受一个(x,y)元组,或者(x,y,width,height)元组,也可以是一个 Rect 对象;

area:接受一个 Rect 对象,默认为 None,如果提供该参数则相当于抠图操作,这表示要绘制的源 Surface 的较小部分。

扫描二维码关注公众号,回复: 14395615 查看本文章

special_flags:可选参数,它是 Pygame.1.8 版本新增的功能,用于指定对应位置颜色的混合方式,参数值有 BLEND_RGBA_ADD、BLEND_SUB 等。如果不提供该参数的情况下,默认使用 source 的颜色覆盖 screen 的颜色。

获取窗口状态

pygame.display.get_active()
功能:当屏幕上的窗口处于活动状态时返回True

属性:get_active() -> bool

当窗口 Surface 被认为可以在屏幕上主动呈现并且可能对用户可见时,返回 True。这是pygame.display.set_mode()的默认状态。即使应用程序完全隐藏在另一个应用程序窗口后面,此方法也可能返回 True。

如果窗口 Surface 已被图标化或最小化(通过pygame.display.iconify()或通过操作系统特定的方法,例如大多数桌面上可用的最小化图标),这将返回 False。

该方法还可以由于其他原因返回 False,而无需用户明确图标化或最小化应用程序。一个值得注意的例子是,如果用户有多个虚拟桌面并且显示 Surface 不在活动的虚拟桌面上。

注意

此函数返回 True 与应用程序是否具有输入焦点无关。参阅 pygame.key.get_focused() 和 pygame.mouse.get_focused() 输入焦点相关的API。

事件类型

Pygame 定义了一个专门用来处理事件的结构,即事件队列,该结构遵循队列“先到先处理”的基本原则,通过事件队列,我们可以有序的、逐一的处理用户的操作(触发事件)。下述表格列出了 Pygame 中常用的游戏事件:

事件类型 描述 成员属性
QUIT 用户按下窗口的关闭按钮 none
ATIVEEVENT Pygame被激活或者隐藏 gain,state
KEYDOWN 键盘按下 unicode、key、mod
KEYUP 键盘放开 key、mod
MOUSEMOTION 鼠标移动 pos, rel, buttons
MOUSEBUTTONDOWN 鼠标按下 pos, button
MOUSEBUTTONUP 鼠标放开 pos, button
JOYAXISMOTION 游戏手柄(Joystick or pad) 移动 joy, axis, value
JOYBALLMOTION 游戏球(Joy ball) 移动 joy, axis, value
JOYHATMOTION 游戏手柄(Joystick) 移动 joy, axis, value
JOYBUTTONDOWN 游戏手柄按下 joy, button
JOYBUTTONUP 游戏手柄放开 joy, button
VIDEORESIZE Pygame窗口缩放 size, w, h
VIDEOEXPOSE Pygame窗口部分公开(expose) none
USEREVENT 触发一个用户事件 事件代码

注意,当使用 Pygame 做游戏开发时,上述事件并非都会应用的到,因此在学习的过程中,我们要懂得触类旁通、举一反三。
请添加图片描述

键盘、鼠标事件示例

import pygame, sys
pygame.init()
screen = pygame.display.set_mode((600,400))
pygame.display.set_caption("pygame事件处理")

while True:
	for event in pygame.event.get():
		if event.type == pygame.QUIT:
			pygame.quit()
			sys.exit()
		elif event.type == pygame.KEYDOWN:
			if event.unicode == "":
				print("KEYDOWN:", "#", event.key, event.mod)
			else:
				print("KEYDOWN:", event.unicode, event.key, event.mod)
		elif event.type == pygame.MOUSEMOTION:
			print("[MOUSEMOTION]:", event.pos, event.rel, event.buttons)
		elif event.type == pygame.MOUSEBUTTONUP:
			print("[MOUSEMOTION]:", event.pos, event.buttons)
		elif event.type == pygame.MOUSEBUTTONDOWN:
			print("[MOUSEMOTION]:", event.pos, event.buttons)	
	pygame.display.update()

猜你喜欢

转载自blog.csdn.net/acktomas/article/details/125829536