Pygame 官方文档 - Tutorials - 设置显示模式(Setting Display Modes)

设置显示模式(Setting Display Modes)

Author: Pete Shinners
Contact: pete@shinners.org

介绍(Introduction)
       在pygame中设置显示模式会在显示器上创建可见的图像表面【surface】。此表面可以覆盖整个屏幕,也可以在支持窗口管理器的平台上窗口化。显示表面只不过是一个标准的pygame surface对象。 在pygame.display中有些特殊函数以便在显示器上更新图像表面内容。
       在pygame中设置显示模式比使用大多数图形库更容易。优点是如果您的显示模式不可用,pygame将模拟您要求的显示模式。 Pygame将选择最符合您请求的设置的显示分辨率和颜色深度,然后允许您使用您请求的格式访问显示。实际上,由于pygame.display模块是围绕SDL库的绑定,SDL实际上正在做所有这些工作。
       以这种方式设置显示模式有利有弊。优点是,如果您的游戏需要特定的显示模式,您的游戏将在不支持您的要求的平台上运行。当你开始使用它时,它也会让生活变得更轻松,以后可以轻松返回并使模式选择更加特别。缺点是你要求的并不总是你会得到的。当必须模拟显示模式时,性能也会受到影响。本教程将帮助您了解查询平台显示功能的不同方法,以及设置游戏的显示模式。

设定的基础知识(Setting Basics)
       首先要了解的是如何确切地设置当前的显示模式。可以在pygame.display模块初始化之后的任何时间设置显示模式。如果您之前已设置了显示模式,则再次进行设置将更改当前模式。使用函数pygame.display.set_mode((width, height), flags, depth)处理设置显示模式。此函数中唯一必需的参数是包含新显示模式的宽度和高度的序列。深度标志是表面的每像素请求位数。如果给定深度为8,pygame将创建一个颜色映射表面。当给定更高的位深度时,pygame将使用被打包的颜色模式。有关深度和颜色模式的更多信息可以在display和surface模块的文档中找到。深度的默认值为0。当给定参数0时,pygame将选择要使用的最佳位深度,通常与系统的当前位深度相同。 flags参数允许您控制显示模式的额外功能。您可以使用HWSURFACE标志在硬件存储器中创建显示表面。同样,有关此内容的更多信息可在pygame参考文档中找到。

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

函数(Functions)
这些是可用于确定最合适的显示模式的例子。您可以在显示模块文档中找到有关这些功能的更多信息。
(1)pygame.display.mode_ok(size, flags, depth)
       此函数采用与pygame.display.set_mode()完全相同的参数。它返回您描述的模式的最佳可用位深度。如果返回零,则在没有模拟的情况下不能使用所需的显示模式。

(2)pygame.display.list_modes(depth, flags)
       返回支持的显示模式列表,其中包含请求的深度和标志。没有模式时返回空列表。 flags参数默认为FULLSCREEN。如果在没有FULLSCREEN的情况下指定自己的标志,则返回值可能为-1。这意味着任何显示大小都很好,因为显示将被窗口化。请注意,列出的模式从最大到最小排序。

(3)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对象的简单成员进行测试。不同的blit标志表示从各种类型的表面到硬件表面进行blitting时是否支持硬件加速。

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

>>> #使用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位的表面【surface】,其他什么也做不了。
>>> 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)

 

以上内容,自己翻译,可能有误,可参考:Tutorials - 设置显示模式(Setting Display Modes))

点我回顶部

 
 
 
 
 
 
 
Fin.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值