2.修订:PYGAME基础

2.1.基本的PYLOG游戏

为了便于修改,并确保您熟悉一个PyGame程序的基本结构,我将简要介绍一个基本的PyGame程序,该程序只显示一个窗口,其中包含一些文本,最后应该看起来像这样(当然,窗口装饰在您的系统上可能会有所不同):

../_images/tom_basic.png

此示例的完整代码如下所示:

#!/usr/bin/python

import pygame
from pygame.locals import *

def main():
    # Initialise screen
    pygame.init()
    screen = pygame.display.set_mode((150, 50))
    pygame.display.set_caption('Basic Pygame program')

    # Fill background
    background = pygame.Surface(screen.get_size())
    background = background.convert()
    background.fill((250, 250, 250))

    # Display some text
    font = pygame.font.Font(None, 36)
    text = font.render("Hello There", 1, (10, 10, 10))
    textpos = text.get_rect()
    textpos.centerx = background.get_rect().centerx
    background.blit(text, textpos)

    # Blit everything to the screen
    screen.blit(background, (0, 0))
    pygame.display.flip()

    # Event loop
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                return

        screen.blit(background, (0, 0))
        pygame.display.flip()


if __name__ == '__main__': main()

2.2.基本的PyGame对象

如您所见,代码由三个主要对象组成:屏幕、背景和文本。这些对象中的每一个都是通过首先调用内置的PyGame对象的一个实例,然后修改它以满足我们的需要来创建的。Screen是一个稍微特殊的情况,因为我们仍然通过PyGame调用来修改显示,而不是调用属于Screen对象的方法。但是对于所有其他的PyGame对象,我们首先将该对象创建为一个PyGame对象的副本,并赋予它一些属性,然后从它们构建我们的游戏对象。

对于背景,我们首先创建一个PyGame Surface对象,并将其设置为屏幕的大小。然后,我们执行Convert()操作将Surface转换为单像素格式。当我们有几个图像和表面时,这显然是必要的,所有这些都是不同的像素格式,这使得渲染它们相当慢。通过转换所有曲面,我们可以显著加快渲染时间。最后,我们用白色(255,255,255)填充背景表面。这些值是 RGB (红绿蓝),可以从任何好的油漆程序中计算出来。

对于文本,我们需要不止一个对象。首先,我们创建一个Font对象,该对象定义要使用的字体以及字体的大小。然后,我们通过使用 render 方法,它提供三个参数:要呈现的文本、是否应该消除锯齿(1=是,0=否),以及文本的颜色(同样是RGB格式)。接下来,我们创建第三个Text对象,该对象获取文本的矩形。理解这一点的最简单方法是想象绘制一个包围所有文本的矩形;然后可以使用该矩形获取/设置文本在屏幕上的位置。因此,在本例中,我们获取矩形,将其 centerx 属性设置为 centerx 属性(因此文本的中心将与背景的中心相同,即文本将在x轴的屏幕上居中)。我们也可以设置y坐标,但它没有任何不同,所以我将文本留在了屏幕顶部。由于屏幕无论如何都很小,所以似乎没有必要。

2.3.闪光

现在我们已经创建了游戏对象,我们需要实际渲染它们。如果我们没有这样做,我们运行程序,我们只会看到一个空白窗口,对象将保持不可见。用于渲染对象的术语是 blitting ,将属于所述对象的像素复制到目标对象上。因此,要渲染背景对象,请将其放置到屏幕上。在本例中,为了简单起见,我们将文本放到背景上(这样背景上就会有文本的副本),然后再把背景放到屏幕上。

闪光是所有游戏中最慢的操作之一,所以你需要小心,不要在每一帧中都太多地闪光到屏幕上。如果你有一个背景图像,一个球在屏幕上飞来飞去,那么你可以在每一帧中对背景进行blit,然后在每一帧中对球进行blit,这会掩盖球的先前位置并渲染新的球,但这会非常慢。一个更好的解决方案是将背景放在球之前占据的区域上,这可以通过球的上一个矩形找到,然后放飞球,这样你只会放出两个小区域。

2.4.事件循环

一旦你设置好了游戏,你需要把它放进一个循环中,这样它就会持续运行,直到用户发出想要退出的信号。所以你开始了一个公开的 while 循环,然后针对循环的每个迭代,这将是游戏的每一帧,更新游戏。第一件事是检查是否有任何PyGame事件,比如用户敲击键盘、点击鼠标键、移动操纵杆、调整窗口大小或试图关闭窗口。在这种情况下,我们只是想注意用户试图通过关闭窗口退出游戏,在这种情况下,游戏应该 return ,这将结束 while 循环。然后我们只需要重新绘制背景,并翻转(更新)显示以绘制所有内容。好的,因为在这个例子中没有移动或发生任何事情,严格来说,我们不需要在每次迭代中重新绘制背景,但我添加了它,因为当屏幕上的东西在移动时,您将需要在这里进行所有的绘制。

2.5.答-达!

就是这样--你最基本的PYGAME游戏!所有的游戏都将采用类似的形式,但实际游戏功能本身的代码要多得多,这更多地是由编程来完成的,而不是由PyGame的工作原理在结构上指导的。这就是本教程的真正意义所在,现在将继续下去。




Edit on GitHub