pygame中display模块

pygame中display模块方法详解

原文链接:https://www.pygame.org/docs/ref/display.html
参考:https://blog.csdn.net/Rita_Aloha/article/details/106208691

该模块提供对pygame显示屏的控制。Pygame具有单个显示Surface,该Surface要么包含在窗口中,要么全屏运行。创建显示后,将其视为常规 Surface。更改不会立即显示在屏幕上;您必须选择两个flipping功能之一来更新实际显示。

显示的原点,其中 x = 0 和 y = 0,是屏幕的左上角。两个轴都朝着屏幕的右下方正增加。

pygame 显示实际上可以以几种模式之一进行初始化。默认情况下,显示是一个基本的软件驱动的帧缓冲区。您可以请求特殊模块,例如自动缩放或 OpenGL 支持。这些由传递给pygame.display.set_mode()的标志控制。

Pygame 在任何时候都只能有一个显示处于活动状态。创建一个新的pygame.display.set_mode()将关闭以前的显示。要检测附加屏幕的数量和大小,您可以使用 pygame.display.get_desktop_sizes然后选择适当的窗口大小和显示索引以传递给pygame.display.set_mode().

为了向后兼容pygame.display,可以精确控制像素格式或显示分辨率。这对于旧的显卡和 CRT 屏幕过去是必需的,但通常不再需要了。使用pygame.display.mode_ok()pygame.display.list_modes()、 和 pygame.display.Info()查询有关显示的详细信息。

创建显示 Surface 后,此模块中的功能会影响单个现有显示。如果模块未初始化,Surface 将失效。如果设置了新的显示模式,现有的 Surface 将自动切换到在新的显示器上运行。

设置显示模式后,pygame 事件队列中会放置几个事件。pygame.QUIT当用户请求程序关闭时发送。窗口将pygame.ACTIVEEVENT在显示器获得和失去输入焦点时接收事件。如果显示设置了 pygame.RESIZABLE标志,pygame.VIDEORESIZE则当用户调整窗口尺寸时将发送事件。pygame.VIDEOEXPOSE当必须重新绘制窗口的某些部分时,直接绘制到屏幕上的硬件显示器将获得事件。

pygame 2.0.1 中引入了一个新的 windowevent API。检查事件模块文档以获取更多信息

某些显示环境具有自动拉伸所有窗口的选项。启用此选项后,此自动拉伸会扭曲 pygame 窗口的外观。在 pygame 示例目录中,有示例代码 (prevent_display_stretching.py),它显示了如何在 Microsoft Windows(需要 Vista 或更高版本)上禁用 pygame 显示的这种自动拉伸。

简单应用

原文链接:https://blog.csdn.net/ccc369639963/article/details/122472337

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 的较小部分。

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

除了创建游戏的主窗口之外,display 模块还提供了许多的和“显示”相关的方法,比如设置游戏窗口的名称,如下表所示

import sys
import pygame
#使用pygame之前必须初始化
pygame.init()
#设置主屏窗口
screen = pygame.display.set_mode((400,400))
#填充主窗口的背景颜色,参数值RGB(颜色元组)
screen.fill((156,156,156))
#设置窗口标题
pygame.display.set_caption('小小工坊')

# 如果没有下列主循环代码,运行结果会一闪而过
while True:
    # 循环获取事件,监听事件
    for event in pygame.event.get():
        # 判断用户是否点了关闭按钮
        if event.type == pygame.QUIT:
            #卸载所有模块
            pygame.quit()
            #终止程序
            sys.exit()
    #更新屏幕内容
    pygame.display.flip()

函数详解

1. pygame.display.init()

功能:初始化显示模块

属性:init()->None

初始化 pygame 显示模块。显示模块在初始化之前无法执行任何操作。在调用更高级别pygame.init()时自动处理。
Pygame将在初始化时从几个内部显示后端中选择一个。将根据当前用户的平台和权限选择显示模式。在显示模块初始化之前,可以将环境变量 SDL_VIDEODRIVER 设置为控制使用哪个后端。这里列出了具有多种选择的系统。
Windows windib, directx
Unix x11, dga, fbcon, directfb, ggi, vgl, svgalib, aalib
在某些平台上,可以将pygame显示嵌入到已经存在的窗口中。为此,必须将环境变量 SDL_window id 设置为包含窗口 id 或句柄的字符串。初始化pygame显示时检查环境变量。请注意,在嵌入式display中运行时可能会有许多奇怪的副作用。

多次调用是无害的,重复调用没有效果。

2. pygame.display.quit()

功能:取消初始化显示模块

属性:quit()->None

关闭整个显示模块。多次调用是无害的,重复调用没有效果。

3. pygame.display.get_init()

功能:如果显示模块已初始化,则返回True

属性:get_init()->bool

4. pygame.display.set_mode()

功能:初始化显示窗口或屏幕

属性:set_mode(size=(0, 0), flags=0, depth=0, display=0)->Surface

此函数将创建一个显示 Surface 。传入的参数是对显示类型的请求。实际创建的显示将是系统支持的最佳匹配。
返回的 Surface 会被绘制成规则 Surface ,但最终将在监视器上看到区别。
如果没有size被传递或设置为(0,0),并且pygame使用SDL版本1.2.10或更高版本,则创建的 Surface 将具有与当前屏幕分辨率相同的大小。如果只有宽度或高度设置为0,则Surface的对应参数将与屏幕分辨率相同。
通常最好不要传递 depth 参数,将默认使用系统的最佳和最快颜色深度。如果你的游戏需要特定的颜色格式,你可以用这个参数来控制色深。Pygame将模拟一个不可用的颜色深度,它会很慢。
请求全屏显示模式时,有时无法与请求的大小完全匹配。在这些情况下,pygame将选择最接近的兼容匹配项,但返回的曲面仍将始终与请求的大小匹配。
在高分辨率display(4k,1080p)和微型图形游戏(640x480)上,因显示的非常小而无法播放时,需使用鼠标事件按比例缩放窗口。游戏认为它是一个640x480的窗口,但实际上它可以更大。
flags参数控制所需的显示类型。有几种类型可供选择,甚至可以使用按位或运算符组合多种类型。如果传递0或no flags参数,它将默认为软件驱动的窗口。
pygame.FULLSCREEN 创建全屏显示
pygame.DOUBLEBUF 推荐用于 HWSURFACE or OPENGL
pygame.HWSURFACE 硬件加速,仅全屏显示
pygame.OPENGL 创建一个OPENGL可渲染显示
pygame.RESIZABLE 显示窗口应该sizeable
pygame.NOFRAME 显示窗口将没有边框或控件
pygame.SCALED 分辨率取决于桌面大小和缩放图形
New in pygame 2.0.0: SCALED

5. pygame.display.get_surface()

功能:获取对当前设置的显示 Surface 的引用

属性:get_surface()->Surface

返回对当前设置的显示 Surface 的引用。如果未设置显示模式,则返回“无”。

6. pygame.display.flip()

功能:将整个显示 Surface 更新到屏幕

属性:flip()->None

这将更新整个显示的内容。如果显示模式使用的flags是 pygame.HWSURFACEpygame.DOUBLEBUF ,则将等待垂直回溯并交换曲面。如果使用的是不同类型的显示模式,则只需更新曲面的全部内容。
当使用 pygame.OPENGL 显示模式时,这将执行缓冲区交换。

7. pygame.display.update()

功能:软件显示屏幕的更新部分

属性

update(rectangle=None)->None
update(rectangle_list)->None
此函数类似于用于软件显示的pygame.display.flip()的优化版本。它只允许更新屏幕的一部分,而不是整个区域。如果没有传递参数,它将更新整个表面积,如pygame.display.flip()
可以向函数传递单个矩形或一系列矩形。一次传递多个矩形比使用单个或部分矩形列表多次调用update更有效。如果传递了一个不包含任何值矩形序列,则会被跳过。
此调用不能用于pygame.OPENGL显示,并将生成异常。

8. pygame.display.get_driver()

功能:获取pygame显示后端的名称

属性:get_driver()->name

返回用于显示后端的内部名称。可用于提供有关哪些显示功能可能会加速的有限信息。

9. pygame.display.Info()

功能:创建一个视频显示信息对象

属性:Info()->VideoInfo

创建包含多个属性的简单对象来描述当前图形环境。如果在 pygame.display.set_mode() 之前调用此命令,则某些平台可以提供有关默认显示模式的信息。这也可以在设置显示模式以验证满足特定显示选项后调用。VidInfo对象有几个属性

属性说明
hw:1,如果显示是硬件加速的
wm:1,如果可以使用窗口显示模式。
video_mem:显示器上的视频内存的兆字节。如果是0,则为未知
bitsize:用来存储每个像素的比特数
bytesize:用来存储每个像素的字节数
masks:用于将RGBA值打包成像素的四个值
shifts(移位)用于将RGBA值打包成像素的四个值
losses:用于将RGBA值打包成像素的四个值。
blit_hw:如果硬件Surface blitting被加速,则为1
blit_hw_CC:1,如果硬件表面色键模糊被加速。
blit_hw_A:1,如果硬件表面像素alpha点化被加速的话
blit_sw:如果软件Surface blitting被加速,则为1
blit_sw_CC:1,如果软件表面色键模糊被加速
blit_sw_A:1,如果软件的表面像素alpha模糊被加速
current_h, current_w:当前视频模式的高度和宽度,如果在调用之前,则为桌面模式的高度和宽度。如果在调用display.set_mode之前调用,则为桌面模式的高度和宽度。被调用之前,桌面模式的高度和宽度。(current_h、current_w自SDL 1.2.10和pygame 1.8.0)。错误时它们为-1,或者如果正在使用旧的SDL。
11. pygame.display.get_wm_info()

功能:获取有关当前窗口系统的信息

属性:get_wm_info()->dict

创建一个包含字符串键的字典。字符串和值由系统任意创建。某些系统可能没有信息,将返回空字典。大多数平台将返回一个"window" 键,其值设置为当前显示的系统id。

New with pygame 1.7.1

12. pygame.display.list_modes()

功能:获取可用全屏模式的列表

属性:list_modes(depth=0, flags=pygame.FULLSCREEN, display=0)->list

此函数返回指定颜色深度的可能大小列表。如果给定参数没有可用的显示模式,则返回值将为空列表。返回值-1意味着任何请求的大小都应该正常工作(这可能是窗口模式的情况)。模式大小按大小排序。
如果depth为0,SDL将为显示选择当前/最佳颜色深度。flags默认为pygame.FULLSCREEN,但您可能需要为特定的全屏模式添加其他标志。
显示索引0表示使用默认显示。
The display argument is new with pygame 1.9.5.

13. pygame.display.mode_ok()

功能:为显示模式选择最佳颜色深度

属性:mode_ok(size, flags=0, depth=0, display=0)->depth

此函数使用与pygame.display.set_mode()相同的参数。它用于确定请求的显示模式是否可用。如果无法设置显示模式,则返回0。否则它将返回与所需显示最匹配的像素深度。
通常不会传递depth参数,但某些平台可以支持多个显示深度。如果传递,它将提示哪个深度更匹配。
最有用的flags是pygame.HWSURFACE、pygame.DOUBLEBUF,也许还有pygame.FULLSCREEN。如果无法设置这些显示标志,则函数将返回0。
显示索引0表示使用默认显示。
The display argument is new with pygame 1.9.5.

14. pygame.display.gl_get_attribute()

功能:获取当前显示的OpenGL flag的值

属性:gl_get_attribute(flag)->value

使用pygame.OPENGL flag调用pygame.display.set_mode()之后,最好检查任何请求的OPENGL属性的值。有关有效标志的列表,请参见pygame.display.gl_set_attribute()。

15. pygame.display.gl_set_attribute()

功能:请求显示模式的OpenGL显示属性

属性:gl_set_attribute(flag, value)->None

使用pygame.OPENGL flags调用pygame.display.set_mode()时,pygame会自动处理设置OPENGL属性,如颜色和双缓冲。OpenGL提供了其他一些您可能需要控制的属性。将这些属性之一作为flags传递,并传递相应的值。这必须在pygame.display.set_mode()之前调用。
许多设置是请求最小值。如果OpenGL无法提供请求的属性,则使用OpenGL语境创建窗口将失败,但它可能会给您一个模具缓冲区,即使您没有请求,也可能会给您一个比请求的更大的缓冲区。
The OPENGL flags are:

GL_ALPHA_SIZE,

GL_DEPTH_SIZE, 
深度缓冲区的最小位大小。默认为 16。

GL_STENCIL_SIZE,
模板缓冲区的最小位大小。默认为 0。

GL_BUFFER_SIZE
帧缓冲区的最小位大小。默认为 0。

GL_ACCUM_RED_SIZE, GL_ACCUM_GREEN_SIZE,

GL_ACCUM_BLUE_SIZE, GL_ACCUM_ALPHA_SIZE,

GL_MULTISAMPLEBUFFERS, 
是否启用多重采样抗锯齿。默认为 0(禁用)。
设置GL_MULTISAMPLESAMPLES为大于 0 的值以控制抗锯齿量。典型值为 2 或 3。

GL_MULTISAMPLESAMPLES,

GL_STEREO
1 启用立体 3D。默认为 0。

New in pygame 2.0: Additional attributes:

GL_ACCELERATED_VISUAL,
GL_CONTEXT_MAJOR_VERSION, GL_CONTEXT_MINOR_VERSION,
GL_CONTEXT_FLAGS, GL_CONTEXT_PROFILE_MASK,
GL_SHARE_WITH_CURRENT_CONTEXT,
GL_CONTEXT_RELEASE_BEHAVIOR,
GL_FRAMEBUFFER_SRGB_CAPABLE
GL_MULTISAMPLEBUFFERS

是否启用多采样抗锯齿。默认为0(禁用)。将 GL_MULTISAMPLESAMPLES 设置为大于0的值,以控制抗锯齿的数量。典型值是2或3。

GL_STENCIL_SIZE

模具缓冲区的最小位大小。默认为0。

GL_DEPTH_SIZE

深度缓冲区的最小位大小。默认为16。

GL_STEREO

1启用立体3D。默认为0。

GL_BUFFER_SIZE

帧缓冲区的最小位大小。默认为0。

GL_CONTEXT_PROFILE_MASK

将OpenGL配置文件设置为以下值之一:

GL_CONTEXT_PROFILE_CORE	禁用不推荐的功能
GL_CONTEXT_PROFILE_COMPATIBILITY	允许不推荐的功能
GL_CONTEXT_PROFILE_ES	只允许OpenGL的ES特性子集
GL_ACCELERATED_VISUAL   设置为1需要硬件加速,或设置为0强制软件渲染。默认情况下,两者都是允许的。
16. pygame.display.get_active()

功能:当屏幕上的窗口处于活动状态时返回True

属性:get_active() -> bool

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

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

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

17. pygame.display.iconify()

功能:使显示面图标化

属性:iconify()->bool

请求将显示曲面的窗口设置为图标化或隐藏。并非所有系统和display都支持图标化显示。如果成功,函数将返回True。
当显示为图标化时,pygame.display.get_active()将返回False。当窗口已图标化时,事件队列应接收ACTIVEEVENT事件。

18. pygame.display.toggle_fullscreen()

功能:在全屏和窗口显示之间切换

属性:toggle_fullscreen()->int

在窗口模式和全屏模式之间切换显示窗口。使用 pygame 1 时,显示驱动程序支持不是很好,但使用 pygame 2,它是切换全屏和从全屏切换的最可靠方法。

pygame 1 中支持的显示驱动程序:

  • x11 (Linux/Unix)
  • Wayland (Linux/Unix)

pygame 2 中支持的显示驱动程序:

  • 窗户(窗户)
  • x11 (Linux/Unix)
  • Wayland (Linux/Unix)
  • 可可 (OSX/Mac)

笔记

toggle_fullscreen()在Windows系统不工作,除非窗口大小在pygame.display.list_modes()获取到的可用列表中或者窗口是用pygame.SCALED标志创建的。请参阅问题 #2380

18. pygame.display.set_gamma()

功能:更改硬件gamma渐变

属性:set_gamma(red, green=None, blue=None)->bool

设置显示硬件上的红色、绿色和蓝色伽马值。如果绿色和蓝色的参数没有通过,它们都将与红色相同。并非所有系统和硬件都支持gamma斜坡,如果函数成功,它将返回True。
gamma值为1.0将创建线性颜色表。值越低,显示越暗,值越高,显示越亮。

19. pygame.display.set_gamma_ramp()

功能:使用自定义查找更改硬件gamma渐变

属性:set_gamma_ramp(red, green, blue)->bool

使用显式查找表设置红色、绿色和蓝色gamma渐变。每个参数应该是256个整数的序列。整数的范围应在0到0xffff之间。并非所有系统和硬件都支持gamma斜坡,如果函数成功,它将返回True。

20. pygame.display.set_icon()

功能:更改显示窗口的系统图像

属性:set_icon(Surface)->None

设置系统用来表示显示窗口的运行时图标。所有窗口默认为窗口图标的简单pygame徽标。
可以传递任何Surface,但大多数系统需要一个32x32左右的较小图像。图像可以具有彩色键透明度,该透明度将传递给系统。
某些系统不允许窗口图标在显示后更改。此函数可以在 pygame.display.set_mode() 之前调用,以便在设置显示模式之前创建图标。

21. pygame.display.set_caption()

功能:设置当前窗口标题

属性:set_caption(title, icontitle=None)->None

如果display有窗口标题,此函数将更改窗口上的名称。有些系统支持用于最小化显示的替换短标题。

22. pygame.display.get_caption()

功能:获取当前窗口标题

属性:get_caption()->(title, icontitle)

返回显示Surface的标题和图标。这些值通常是相同的。

23. pygame.display.set_palette()

功能:设置索引显示的显示调色板

属性:set_palette(palette=None)->None

这将更改8位display的视频显示调色板。这不会更改实际显示Surface的选项板,仅更改用于显示Surface的选项板。如果未传递任何调色板参数,则将还原系统默认调色板。调色板是一个RGB三元组序列。

24. pygame.display.get_num_displays()

功能:返回显示数

属性:get_num_displays()->int

返回可用显示的数目。如果pygame.get_sdl_version()取得并返回SDL的主版本号低于2,则此值始终为1。

New in pygame 1.9.5.

25. pygame.display.get_window_size()

功能:返回窗口或屏幕的大小

属性:get_window_size()->tuple

返回用pygame.display.set_mode()初始化的窗口大小。如果使用缩放,这可能与显示Surface的大小不同。

New in pygame 2.0.

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pygamepygame.display用于管理游戏窗口的显示。通过调用pygame.display.get_window_size()函数可以获取当前窗口的大小。此函数返回一个元组,包含窗口的宽度和高度。 在使用Pygame 1.9.5及以上版本时,可以使用pygame.display.mode_ok()函数来检查指定的显示模式是否可用。该函数接受三个参数:width(宽度),height(高度)和flags(标志),并返回一个布尔值,指示是否支持所指定的显示模式。 要创建游戏的主窗口,可以使用pygame.display.set_mode()函数。该函数接受一个可选的size参数,用于指定窗口的大小。如果不指定size参数,则默认使用当前屏幕的宽度和高度。此外,还可以通过flags参数来设置其他窗口选项,如全屏模式、双缓冲等。函数返回一个Surface对象,表示创建的窗口。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [pygamedisplay模块方法详解](https://blog.csdn.net/Rita_Aloha/article/details/106208691)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [pygamedisplay模块](https://blog.csdn.net/acktomas/article/details/125824630)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值