修改Pygame界面

2.1。基本的Pygame游戏
为了修改,并确保您熟悉Pygame程序的基本结构,我将简要介绍一个基本的Pygame程序,该程序只显示一个窗口,其中包含一些文本,到最后,看起来像这样(当然你的系统上的窗口装饰可能会不同):这个例子的完整代码如下所示:在这里插入图片描述

#!/usr/bin/python

import pygame
from pygame.locals import *

def main():
    # 初始化屏幕
    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)

    # 把所有东西都放在屏幕上
    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转换为单一像素格式。
当我们有多个图像和表面,所有不同的像素格式,这显然是必要的,这使渲染相当缓慢。
通过转换所有的表面,我们可以大大加快渲染时间。
最后,我们用白色填充背景表面(255,255,255)。
这些值是RGB(红绿蓝),可以从任何好的绘图程序中计算出来。
对于文本,我们需要多个对象。
首先,我们创建一个字体对象,它定义使用哪种字体,以及字体的大小。
然后我们创建一个文本对象,通过使用属于我们的字体对象的render方法,提供三个参数:要渲染的文本,是否应该反锯齿(1=yes, 0=no),以及文本的颜色(同样是RGB格式)。
接下来,我们创建第三个文本对象,它获取文本的矩形。
理解这一点最简单的方法是想象绘制一个矩形,将所有文本包围;
然后可以使用这个矩形来获取/设置文本在屏幕上的位置。
在这个例子中,我们得到一个矩形,将它的centerx属性设置为背景的centerx属性(这样文本的中心将与背景的中心相同,即文本将在屏幕的x轴上居中)。
我们也可以设置y坐标,但没有什么不同,所以我把文本放在屏幕顶部。
因为屏幕很小,所以似乎没有必要这么做。

2.3。传送
现在我们已经创建了游戏对象,我们需要实际渲染它们。
如果我们不这样做,然后运行程序,我们只会看到一个空白窗口,而对象将保持不可见。
用于渲染对象的术语是blitt,即将属于该对象的像素复制到目标对象上。
为了渲染背景对象,你把它块放到屏幕上。
在这个例子中,为了简单起见,我们将文本移到背景上(这样背景就有了文本的副本),然后将背景移到屏幕上。
比特化是任何游戏中最慢的操作之一,所以你需要小心不要在每一帧中对屏幕进行太多比特化。
如果你有一个背景图像,一个球在屏幕上飞来飞去,那么你就可以在每一帧中分割背景和球,这将覆盖球之前的位置并渲染新球,但这将非常缓慢。
一个更好的解决方案是将背景分割到球之前占据的区域,这可以通过球之前的矩形找到,然后分割球,这样你就只分割了两个小区域。

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

2.5。哈!
这就是你最基本的Pygame游戏!
所有的游戏都采用类似的形式,但实际的游戏功能本身需要更多的代码,这些代码更多地用于编程,在结构上较少受到Pygame工作方式的指导。
这是本教程真正的内容,现在将继续。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值