Pygame 官方文档 - Tutorials - 游戏制作指南(Making Games Tutorial)- 校订:基础(Revision: Pygame fundamentals)

游戏制作指南(Making Games Tutorial)

点我回总目录

2.校订:Pygame基础(Revision: Pygame fundamentals)

2.1.基本的Pygame游戏

        出于校订的目的,为了确保你熟悉Pygame程序的基本结构,我将简要介绍一个基本的Pygame程序,该程序只显示一个带有一些文本的窗口,应该, 到最后,看起来像这样(虽然当然窗户装饰可能会在你的系统上有所不同):

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

#!/usr/bin/python

import pygame
from pygame.locals import *

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

    # 填充背景
    background = pygame.Surface(screen.get_size())
    background = background.convert()
    background.fill((250, 250, 250))

    # 显示一些文本
    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到screen上
    screen.blit(background, (0, 0))
    pygame.display.flip()

    # 事件循环
    while 1:
        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对象的实例,然后修改它以满足我们的需求。屏幕是一个稍微特殊的情况,因为我们仍然通过Pygame调用修改显示,而不是调用属于屏幕对象的方法。但对于所有其他Pygame对象,我们首先将对象创建为Pygame对象的副本,为其提供一些属性,并从中构建我们的游戏对象。
        背景部分,我们首先创建一个Pygame Surface对象,并使其成为屏幕的大小。然后,我们执行convert()操作将Surface转换为单个像素格式。当我们有几个图像和表面,所有都是不同的像素格式,这使得渲染它们非常慢时,这显然是必要的。通过转换所有surface,我们可以大大加快渲染时间。最后,我们用白色填充背景表面(255,255,255)。这些值是RGB(红 绿 蓝),可以从任何好的绘图程序中得出。
        文本部分,我们需要一个以上的对象。首先,我们创建一个字体对象,它定义要使用的字体和字体大小。然后我们通过使用属于我们的字体对象的render方法创建一个文本对象,提供三个参数:要渲染的文本,是否应该消除锯齿(1 =是,0 =否),以及文本的颜色(再次以RGB格式)。接下来,我们创建第三个文本对象,它获取文本的矩形。理解这一点的最简单方法是想象绘制一个围绕所有文本内容的矩形;然后,您可以使用此矩形来获取/设置屏幕上文本的位置。因此,在此示例中,我们获取矩形,将其centerx属性设置为背景的centerx属性(因此文本的中心将与背景的中心相同,即文本将在x轴上的屏幕中心)。我们也可以设置y坐标,但它没有任何不同,所以我将文本留在屏幕顶部。因为屏幕很小,所以似乎没必要。

2.3.Blitting

        现在我们已经创建了我们的游戏对象,我们需要实际渲染(render)它们。如果我们没有,我们运行程序,我们只看到一个空白窗口,对象将保持不可见。用于渲染对象的术语是blitting,这是将属于所述对象的像素复制到目标对象的位置。因此,要渲染背景对象,请将其blit到屏幕上。在这个例子中,为了简单起见,我们将文本blit到背景上(因此背景现在将有一个文本的副本),然后将背景blit到屏幕上。
        Blitting是任何游戏中最慢的操作之一,因此您需要注意不要在每个帧中对屏幕进行过多的blit操作。如果你有一个背景图像,并且一个球在屏幕上飞舞,那么你可以blit背景然后在每一帧中blit球,这将掩盖球的先前位置并渲染新的球,但这将非常缓慢。一个更好的解决方案是将背景blit到球先前占据的区域上,这可以通过球的前一个矩形找到,然后blit球,这样你只需要blit两个小区域。

2.4.事件循环

        一旦你设置好了游戏,你需要把它放到一个循环中,这样它会一直运行,直到用户发出他/她想要退出的信号。 所以你开始启动一个while循环,然后对于循环的每一个迭代,这将是游戏的每一个帧,更新游戏。 第一件事是检查任何Pygame事件,用户点击键盘,单击鼠标按钮,移动操纵杆,调整窗口大小或尝试关闭它。 在这种情况下,我们只是想要注意用户试图通过关闭窗口来退出游戏,在这种情况下游戏应该返回,这将结束while循环。 然后我们只需要简单地重新blit背景,并翻转(更新)显示以绘制所有内容。 好吧,因为在这个例子中没有任何动作或发生,我们并不严格地说需要在每次迭代中重新blit背景,但我在这里把它放进去,因为当东西在屏幕上移动时,你需要在这里做所有blitting工作。

2.5.当当!(Ta-da!)

        就是这样 —— 你最基本的Pygame游戏! 所有游戏都将采用与此类似的形式,但是有更多代码用于实际的游戏功能本身,这些更多的是用于编程,而Pygame对结构的运作指导较少。 这就是本教程的真正含义,现在让我们继续介绍。
 
上一篇:Tutorials - 游戏制作指南(Making Games Tutorial)- 介绍(Introduction)
下一篇:Tutorials - 游戏制作指南(Making Games Tutorial)- 正式开干(Kicking things off)
以上内容,自己翻译,可能有误,可参考:Tutorials - 游戏制作指南(Making Games Tutorial)- 校订:基础(Revision: Pygame fundamentals)

点我回顶部

 
 
 
 
 
 
 
Fin.

猜你喜欢

转载自blog.csdn.net/Enderman_xiaohei/article/details/88865176