持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第22天,点击查看活动详情
pygame 矩形对象
Pygame通常要求您为其提供一个矩形,以定义屏幕的哪个部分应受函数调用的影响。例如,您可以通过设置剪切矩形(在下一节中介绍)来限制Pygame在屏幕的矩形区域上绘图。可以使用包含四个值的元组来定义矩形:左上角的 x 和 y 坐标,后跟矩形的宽度和高度。
或者,您可以将 x 和 y 坐标作为单个元组,后跟宽度和高度作为另一个元组。以下两行定义具有相同尺寸的矩形:
您可以使用当时最方便的方法。例如,您可能已经将坐标和大小存储为元组,因此使用第二种方法会更容易。
除了定义矩形之外,Pygame 还有一个 Rect 类,该类存储与矩形元组相同的信息,但包含许多使用它们的便捷方法。Rect 对象被频繁使用,以至于它们包含在 pygame.locals 中 - 所以如果你从 pygame.locals 导入 * 在你的脚本的顶部,你不需要在它们前面加上一个模块名称。
若要构造 Rect 对象,请使用与矩形元组相同的参数。以下行构造等效于两个矩形元组的 Rect 对象:
拥有 Rect 对象后,可以调整其位置或大小,检测点是在内部还是外部,或者查找其他矩形相交的位置。有关更多详细信息,请参阅 Pygame 文档
裁剪
通常,在为游戏构建屏幕时,您可能只想绘制到显示的一部分。例如,在战略命令和征服类型的游戏中,您可能将屏幕顶部作为可滚动的地图,在其下方显示部队信息的面板。但是,当您开始在屏幕上绘制部队图像时,您不希望它们绘制在信息面板上。为了解决此问题,曲面具有剪切区域,该区域是一个矩形,用于定义可以绘制到屏幕的哪个部分。若要设置剪切区域,请使用矩形样式对象调用曲面对象的set_clip方法。您还可以通过调用get_clip来检索当前剪切区域。
以下代码段显示了如何使用剪辑来构建策略游戏的屏幕。对剪辑的第一个调用设置区域,以便绘制地图的调用只能绘制到屏幕的上半部分。第二次调用set_clip设置剪切区域到屏幕的其余部分:
次表面
次表面是另一个表面内部的曲面。当您在次表面上绘制时,它也会绘制到其父表面上。子表面的一个用途是绘制图形字体。游戏。字体模块以单一颜色生成漂亮,清晰的文本,但有些游戏需要图形更丰富的字体。您可以为每个字母保存一个图像文件,但创建一个包含所有字母的图像,然后在将图像加载到Pygame时创建26个子表面可能会更容易。
若要创建子曲面,请调用 Surface 对象的次曲面方法,该方法采用一个矩形来定义它应覆盖的父项的哪个部分。它将返回一个新的 Surface 对象,该对象具有与父对象相同的颜色格式。以下是我们如何加载字体图像并将其划分为字母大小的部分:
这将创建两个my_font_image的子表面并将它们存储在字典中,以便我们可以轻松查找给定字母的子表面。当然,我们需要的不仅仅是“a”和“b”,所以对地下的调用可能处于重复26次的循环中。
处理次表面时,请务必记住,子表面具有自己的坐标系。换句话说,地下的点 (0, 0) 始终是左上角,无论它位于父项内的哪个位置。
填充表面
当您在显示器上创建图像时,您应该覆盖整个屏幕,否则,前一个屏幕的部分将显示出来。如果你不在每个像素上绘制,当你尝试对任何东西进行动画处理时,你会得到一个令人不快的频闪效果。避免这种情况的最简单方法是通过调用表面对象的填充方法(采用颜色)来清除屏幕。以下情况会将屏幕清除为黑色:
填充函数还采用一个可选的矩形来定义要清除的区域,这是绘制实心矩形的便捷方法。
注意 如果使用其他方法在整个屏幕上绘制,则无需通过调用来填充来清除它。