在我们使用pygame之前,首先我们的导入pygame模块:
import pygame
首先我们来考虑一下我们要创建的窗体的场景,这是我们游戏的主窗体,所以我们应该一直让窗体显示,并且不断的接收用户事件。一般游戏窗体的大小我们是不希望改动的,所以我们这里将会固定窗体大小,禁止改变。
那么我们就开始我们的第一步:创建固定大小的窗体:
在使用pygame的模块之前,有一件事情是必须要做,那就是初始化 所有的pygame模块:
pygame.init()
当然了,这是比较方便的初始化所有导入的pygame模块的做法,如果初始化模块失败,这个函数也是不会产生异常的。如果我们单独调用模块的init()方法,如果出去,那么我们会收到异常信息。它的返回值类型如下:
init() -> (numpass, numfail)
这是一个包含成功数和失败数的元组,我们可以试着打印一下pygame.init()的返回结果:
result = pygame.init()
print(result)
输出结果:
(6, 0)
也就是说有6个模块成功初始化,没有一个失败。
接下来我们就要开始显示一个窗口了,这里我们需要用到:pygame.display模块
这个模块是用来显示和控制窗体和屏幕的,下面是我们要用到的方法:
pygame.display.set_mode — Initialize a window or screen for display
pygame.display.flip — Update the full display Surface to the screen
pygame.display.update — Update portions of the screen for software displays
pygame.display.set_icon — Change the system image for the display window
pygame.display.set_caption — Set the current window caption
大家可以看到pygame.display.set_mode的说明,用来用来初始化一个窗体或者Surface(这个不太会翻译,所以就这样写了,大家都认识这个单词)来显示,
语法:
set_mode(resolution=(0,0), flags=0, depth=0) -> Surface
其中resolution参数包含两个值,一个是宽度,一个高度。如果我们将宽度/高度设置为0,那么设置为0的将会和屏幕对应的宽度/高度一致。
其中flags是pygame定义的一些选项的集合,可选参数如下:
pygame.FULLSCREEN create a fullscreen display
pygame.DOUBLEBUF recommended for HWSURFACE or OPENGL
pygame.HWSURFACE hardware accelerated, only in FULLSCREEN
pygame.OPENGL create an OpenGL-renderable display
pygame.RESIZABLE display window should be sizeable
pygame.NOFRAME display window will have no border or controls
我们可以使用管道形式如:pygame.FULLSCREEN | pygame.NOFRAME 来组合使用这些参数。
depth这个参数一般来说是不建议个人去修改的,它会默认为系统最佳的色彩深度。
当然了,如果你有特别的需求,也是可以自己定制的。
关于色彩深度:色彩深度计算机图形学领域表示在位图或者视频帧缓冲区中储存1像素的颜色所用的位数,它也称为位/像素(bpp)。色彩深度越高,可用的颜色就越多。
返回值是一个Surface。
那么我们就创建一个大小为(1024,600)的窗体:
screen = pygame.display.set_mode((1024, 600))
运行程序:
这就是我们的主窗口了。
为了以后代码的方便,这里我们创建一个配置 类用来存放游戏相关的配置信息:
那么我们应该在主窗口中使用这两个配置信息:
首先在我们的war_alien.py中引入这个类
from settings import Settings
然后在我们的函数里面实例化类对象然后使用:
#实例化配置类Settings
settings = Settings()
screen = pygame.display.set_mode((settings.screen_width, settings.screen_height))
运行结果和上面的是一样的。
接下来我们就设置一下窗体的标题吧:
settings.py
self.screen_title = '外星人大作战
war_alien.py
pygame.display.set_caption(settings.screen_title)
set_caption语法:
set_caption(title, icontitle=None) -> None
如果显示器具有窗口标题,则此功能将更改窗口上的名称。某些系统支持用于最小化显示的备用较短标题。icontitle这个参数大家可以不用考虑。
既然标题我们都改了,那么就改一下窗体的icon,在修改icon之前,大家可以按照下面的组织结构做好准备工作:
在我们工程目录下创建一个images的文件夹,用来存放我们开发过程中用到的图片资源,然后在Settings类中定义窗体icon路径:
self.screen_icon = 'images/alien.png'
这里我们用到的函数是:
pygame.display.set_icon()
描述:更改显示窗口的系统图像
语法:set_icon(Surface) -> None
大家可以看到这里接收的参数是一个Surface,如果我们直接拿我们刚才定义的路径去设置
pygame.display.set_icon(settings.screen_icon)
会出现错误:
TypeError: argument 1 must be pygame.Surface, not str
正确的做法是:
pygame.display.set_icon(pygame.image.load(settings.screen_icon))
pygame.image.load()
描述:从文件加载新图像
语法:load(filename) -> Surface
通过load方法返回的Surface来设置icon。
接下来我们来做今天的最后一步,给我们的窗体设置一个背景颜色或者背景图片。
settings.py
self.screen_bg_color = (230, 230, 230)
war_alien.py
screen.fill(settings.screen_bg_color)
效果图如下:
设置背景图片的话可以用下面的方式:
screen.blit(pygame.image.load(settings.screen_backgroud),(0,0))
其中settings.screen_backgroud就是我们背景图片的路径了,(0,0)则是指定和窗体对齐的位置。