pygame设置显示模式

在pygame中设置显示模式将在监视器上创建一个可见的图像表面。
这个界面可以覆盖全屏,也可以在支持窗口管理器的平台上打开。
显示表面只不过是一个标准的pygame表面对象。
pygame中需要一些特殊的函数。
Displaypygame模块用来控制显示窗口和屏幕模块来保持图像表面内容在监视器上的更新。
在pygame中设置显示模式比使用大多数图形库更容易。
优点是,如果您的显示模式不可用,pygame将模拟您所要求的显示模式。
Pygame将选择与您所要求的设置最匹配的显示分辨率和颜色深度,然后允许您使用所要求的格式访问显示。
现实中,自从pygame。
displaypygame模块用来控制显示窗口和屏幕的模块是一个围绕SDL的绑定库,SDL实际上是在做所有这些工作。
以这种方式设置显示模式有优点也有缺点。
优势在于,如果你的游戏需要特定的显示模式,那么你的游戏将运行在不支持你要求的平台上。
当你开始某些东西的时候,它也会让你的生活变得更容易,它总是很容易在以后返回并使模式选择更特殊一些。
缺点是你所要求的并不总是你能得到的。
当必须模拟显示模式时,还会有性能损失。
本教程将帮助你理解查询平台显示能力的不同方法,并为你的游戏设置显示模式。

设置基本知识
首先要学习的是如何实际设置当前显示模式。
显示模式可以在pygame后的任何时间设置。
Displaypygame模块控制显示窗口和屏幕模块已经初始化。
如果您之前设置了显示模式,再次设置将改变当前的模式。
设置显示模式是通过函数pygame.display来处理的。
初始化显示的窗口或屏幕。
这个函数中唯一需要的参数是一个包含新显示模式的宽度和高度的序列。
深度标志是请求的表面每像素位。
如果给定的深度是8,pygame将创建一个颜色映射的表面。
当给一个更高的位深度,pygame将使用打包颜色模式。
更多关于深度和颜色模式的信息可以在显示和表面模块的文档中找到。
深度的默认值是0。
当给定参数为0时,pygame将选择使用的最佳位深度,通常与系统当前位深度相同。
flags参数允许您控制显示模式的额外特性。
你可以用HWSURFACE标志在硬件内存中创建显示界面。
同样,有关这方面的更多信息可以在pygame引用文档中找到。

如何决策
所以你该如何选择一种与你的图像资源和游戏所运行的平台相匹配的显示模式?
有几种方法可以收集有关显示设备的信息。
所有这些方法都必须在初始化display模块之后调用,但是您可能希望在设置显示模式之前调用它们。
首先,pygame.display.Info()创建一个视频显示信息对象将返回一个特殊的对象类型VidInfo,它可以告诉你很多关于图形驱动程序能力的信息。
pygame.display的函数。
list_modes(depth, flags)获取可用的全屏模式列表可以用来查找系统支持的图形模式。
pygame.display。
为显示模式选择最佳颜色深度接受与set_mode()相同的参数,但返回与您请求的最接近的匹配位深度。
最后,pygame.display.get_driver()获取pygame显示后端的名称将返回由pygame选择的图形驱动程序的名称。
只要记住黄金法则。
Pygame可以在你要求的任何显示模式下工作。
有些显示模式将需要被模拟,这将会减慢你的游戏,因为pygame将需要将你的每次更新转换为“真正的”显示模式。
最好的办法是始终让pygame选择最佳位深,并在加载所有图形资源时将其转换为这种格式。
让pygame通过调用set_mode()来选择位深度,不带深度参数或深度为0,或者可以调用mode_ok()来找到最接近所需的匹配位深度。
当显示模式为窗口模式时,通常必须匹配与桌面相同的位深。
当你是全屏时,有些平台可以切换到最适合你的需要的位深。
如果你在设置显示模式之前获得VidInfo对象,你可以找到当前桌面的深度。
设置了显示模式后,你可以通过获取一个VidInfo对象或调用任何Surface来找到它的设置信息。
在显示面上获取*方法。

功能
这些例程可以用来确定最合适的显示模式。您可以在显示模块文档中找到关于这些函数的更多信息。

  • pygame.display.mode_ok(size, flags, depth)这个函数接受与pygame.display.set_mode()完全相同的参数。它返回您所描述的模式的最佳可用位深度。如果返回0,则在没有模拟的情况下,所需要的显示模式不可用。
  • pygame.display.list_modes(depth, flags)使用请求的深度和标志返回支持的显示模式列表。如果没有模式,则返回空列表。flags参数默认为FULLSCREEN。如果在不使用FULLSCREEN的情况下指定自己的标志,那么返回值很可能是-1。这意味着任何显示大小都是可以的,因为显示将是窗口化的。注意,列出的模式是从大到小排序的。
  • pygame.display.Info()这个函数返回一个对象,该对象包含多个描述显示设备的成员。打印VidInfo对象将快速显示该对象的所有成员和值。`import pygame.display

pygame.display.init()
info = pygame.display.Info()
print info
<VideoInfo(hw = 1, wm = 1,video_mem = 27354
blit_hw = 1, blit_hw_CC = 1, blit_hw_A = 0,
blit_sw = 1, blit_sw_CC = 1, blit_sw_A = 0,
bitsize = 32, bytesize = 4,
masks = (16711680, 65280, 255, 0),
shifts = (16, 8, 0, 0),
losses = (0, 0, 0, 8)>``

您可以作为VidInfo对象的成员测试所有这些标志。不同的位标告诉硬件加速是否支持从各种类型的表面到硬件表面的位标。

例子
下面是一些初始化图形显示的不同方法的示例。它们应该可以帮助您了解如何开始设置显示模式。

>>> #用640 x 480的窗口显示给我最好的深度
>>> pygame.display.set_mode((640, 480))

>>> #给我最大的16位显示
>>> modes = pygame.display.list_modes(16)
>>> if not modes:
...     print '16-bit not supported'
... else:
...     print 'Found Resolution:', modes[0]
...     pygame.display.set_mode(modes[0], FULLSCREEN, 16)

>>> #需要一个8位的表面,其他什么都不行
>>> if pygame.display.mode_ok((800, 600), 0, 8) != 8:
...     print 'Can only work with an 8-bit display, sorry'
... else:
...     pygame.display.set_mode((800, 600), 0, 8)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值