使用过Pygame模块的朋友对于模块中的pygame.init()的用法有时候不是很理解。但必须知道的是对于导入和初始化操作是Pygame模块使用中比较重要的一步,如果有些细节没有考虑到,后续会踩到一些“坑”,比较难理解,而且出现的异常也不容易查找。今天,给大家详细解释下Pygame中的模块导入和一些常量的初始化的注意事项。
让我们开始吧
我们来看下官网的一句话:“It is alsoflexible enough to give you control over what is happening.”。这句话说的是对于模块的导入和变量初始化是足够灵活的,如果导入和初始化合理,可以让你控制正在发生的事情,免除不必要的异常和麻烦。如果不合理?官网好像没有说,但应该还是麻烦不断……
官网这么解释!
模块导入
对于模块的导入,一般使用下面两行代码
import pygame
from pygame.locals import *
第一行将所有可用的pygamemodules一次性导入到程序空间中。
第二行导入是可选项,它暂时将有限的常量和函数放入到脚本命名空间中。对于命名空间的解释,请大家自行百度吧。
典型的pygame的常量有很多,比如:
pygame.FULLSCREEN,控制全屏,通常使用0或者1来控制pygame.HWSURFACE 控制是否进行硬件加速pygame.RESIZABLE 控制窗口是否可以调节大小
还有很多,如果想要直接使用这些常量,可以使用from pygame.locals import *进行导入,后续我们即可直接使用,不用添加点号前的pygame咯。
模块导入及初始化操作
使用import pygame进行导入的时候,Pygame对于进行导入的一些可选模块(比如字体模块font等),首先会进行测试,如果测试可以导入,则导入相应的可选模块,如果测试该模块导入异常,则Pygame直接将字体设置为None,这也使得以后测试可选模块是否可用创造了有利的条件(直接判断其是否为None即可)。
初始化操作
用过Pygame的朋友们肯定都知道,pygame不同于其他的模块,在使用前通常需要加上一句pygame.init()。这也是困扰很多人的一点,模块在导入时,变量并没有进行初始化?为什么还要显式的进行初始化?这一句有何作用?我们来揭开这一神秘面纱。
关于初始化的一些疑问
需要确定的一点是初始化过程使用的是这样一种机制:
pygame不知道你要初始化哪些模块,它初始化一些它认为必要的内容(界面、设备等),如果这些内容初始化成功,它们将自动进入命名空间中;如果初始化过程中抛出异常,它内部对这些异常进行处理(一般使用get_init()函数进行隐式处理,不会显示出来!如果初始化成功返回True否则返回False)。
这种机制的好处是多次调用pygame.init()函数都不会使程序崩溃。而要判断某一变量或函数是否初始化成功只需判断其是否为None即可。
初始化过程中有其内在的机制
对于没有初始化成功的部分,我们可以手动执行其相应的初始化操作即可。如字体初始化使用:pygame.font.init()即可。其它类似字体的初始化过程。
部分图片来自网络,如侵权请告知作者删除。
欢迎大家留言关注,后续将推出一些大家感兴趣的小项目。
转载请注明出处(百家号:Python高手养成)