游戏制作指南(Making Games Tutorial)

点我回总目录 ☚

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

2.1.基本的Pygame游戏

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

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

#!/usr/bin/pythonimport pygame
from pygame.locals import *def main():# 初始化 screenpygame.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().centerxbackground.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:returnscreen.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.

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

  1. Pygame 官方文档 - Tutorials - 游戏制作指南(Making Games Tutorial)- 正式开干(Kicking things off)

    游戏制作指南(Making Games Tutorial) 点我回总目录 ☚ 3.正式开干(Kicking things off) 代码的第一部分相对简单,一旦编写,通常可以在您制作的每个游戏中重复使 ...

  2. Pygame 官方文档 - Tutorials - 逐行的黑猩猩教程(Line By Line Chimp)

    逐行的黑猩猩教程(Line By Line Chimp) 作者: Pete Shinners 联系方式: pete@shinners.org 介绍(Introduction)        在pyga ...

  3. Pygame 官方文档 - Tutorials - Surfarray模块介绍(Surfarray Introduction)

    Surfarray模块介绍(Surfarray Introduction) Author: Pete Shinners Contact: pete@shinners.org 介绍(Introducti ...

  4. Pygame 官方文档 - 中译版

    pygame 文档 Pygame之家[Pygame Home] 帮助内容[Help Contents] 指导索引[Reference Index] 最有用的东西 [Most useful stuff] ...

  5. Pygame 官方文档 - Documents - 读我(Readme)

    关于 - 维基(Wiki) 网络旅行者,你好: 欢迎来到我们万维网的简陋(有点奇怪)的小部分.让我快速介绍一下你在这里偶然发现的事情.         pygame(库)是一个免费的开放源码pytho ...

  6. Pygame 官方文档 - pygame.display

    Pygame.display Pygame中用于控制窗口和屏幕显示的模块 pygame.display.init - 初始化display模块 pygame.display.quit - 取消初始化d ...

  7. Pygame 官方文档 - pygame.cursors

    pygame.cursors Pygame 中使用光标资源的模块. pygame.cursors.compile -- 由纯字符串创建二进制光标数据 pygame.cursors.load_xbm - ...

  8. Pygame 官方文档 - pygame.key

    pygame.key 与键盘相关的 Pygame 模块. pygame.key.get_focused() - 当窗口获得键盘的输入焦点时返回 True pygame.key.get_pressed( ...

  9. Pygame 官方文档 - pygame.mouse

    pygame.mouse Pygame 中与鼠标工作相关的模块. pygame.mouse.get_pressed -- 获取鼠标按键的情况(是否被按下) pygame.mouse.get_pos - ...

最新文章

  1. java SSM 框架 多数据源 代码生成器 websocket即时通讯 shiro redis 后台框架源码
  2. java接口等待几秒再返回_怎样才能在UI线程中等待okhttp返回结果才进行下一步
  3. 零基础学前端开发技术之第七章 浮动塌陷
  4. java 持续集成工具_Jenkins-Jenkins(持续集成工具)下载 v2.249.2官方版--pc6下载站
  5. 解释器模式(行为模式)
  6. Linux下配置服务器节点上的时区
  7. php 抓取 wordpress 文字内容,如何抓取WordPress文章
  8. Jmeter新手频犯错误之一(登录)
  9. html图片实现左右滑动,jquery实现左右滑动式轮播图
  10. 【转】 谈谈C++中的swap函数
  11. android pdfjet_GitHub - lnj721/PdfBuilder: Android端使用图片生成PDF文件
  12. RESTful 架构详解设计模式一种约束
  13. 【渝粤教育】国家开放大学2019年春季 1250文论专题 参考试题
  14. 在写易买网时产生的错误 JSTL标签库中c:choose/c:choose不能放JSP页面!-- --注释...
  15. 赋能行业 共建生态 阿里巴巴首次亮相义乌标准展
  16. 华为海思Hi3798芯片盒子免TTL刷入Ubuntu_NAS系统【教程分享】
  17. 由于 Exception.tostring()失败,因此无法打印异常字符串
  18. SysML建模工具学习笔记总结一
  19. Office2013 Visio2013 Project2013零售版与VL版互相转换
  20. Excel 数据统计小技巧

热门文章

  1. 关于XP和win7前置音频插孔无声音的解决办法
  2. 来自北大算法课的Leetcode题解:268. 丢失的数字
  3. IOS UIPickView+sqlite 选择中国所有城市案例
  4. 南邮 OJ 2059 S4全球总决赛(2)
  5. iOS 设置URLscheme
  6. patch文件格式 patch文件的结构 使用和制作patch文件
  7. AUTOCAD2013激活方法-使用注册机生成激活码
  8. 关于EOS你不得不知的三件事—写在CoinCola可盈可乐上线EOS之前
  9. itemCF matlab算法,基于物品的协同过滤算法(ItemCF)
  10. 毕业设计-基于微信小程序的人脸访客管理系统