如何将矩形传递到 pygame.display.update() 中以更新窗口的特定区域?

2023-12-14

On the 文档页 for pygame.display.update(),它表示您可以将一个矩形传递到该方法中以更新部分屏幕。然而,我看到的所有示例都只是从程序中的图像或形状传递现有的矩形。我如何告诉它直接更新屏幕上的某个区域?例如,当绘制一个矩形时,我可以使用 rect 参数(100,200,30,40)。这将绘制一个顶部为 200、左侧为 100、宽度为 30、高度为 40 的矩形。我如何将类似的参数传递给pygame.display.update()?我试过pygame.display.update((100,200,30,40)),但这会更新整个窗口。


只需定义一个rect并将其传递给pygame.display.update()仅更新显示的该特定区域。您还可以传递矩形列表。

import random

import pygame as pg
from pygame.math import Vector2


# A simple sprite, just to have something moving on the screen.
class Ball(pg.sprite.Sprite):

    def __init__(self, screen_rect):
        super().__init__()
        radius = random.randrange(5, 31)
        self.image = pg.Surface((radius*2, radius*2), pg.SRCALPHA)
        pg.draw.circle(self.image, pg.Color('dodgerblue1'), (radius, radius), radius)
        pg.draw.circle(self.image, pg.Color('dodgerblue3'), (radius, radius), radius-2)
        self.rect = self.image.get_rect(center=screen_rect.center)
        self.vel = Vector2(random.uniform(-2, 2), random.uniform(-2, 2))
        self.pos = Vector2(self.rect.center)
        self.screen_rect = screen_rect
        self.lifetime = 350

    def update(self):
        self.pos += self.vel
        self.rect.center = self.pos

        self.lifetime -= 1
        if not self.screen_rect.contains(self.rect) or self.lifetime <= 0:
            self.kill()


def main():
    screen = pg.display.set_mode((800, 600))
    screen.fill((20, 40, 70))
    pg.display.update()
    screen_rect = screen.get_rect()
    clock = pg.time.Clock()
    all_sprites = pg.sprite.Group()
    # Pass this rect to `pg.display.update` to update only this area.
    update_rect = pg.Rect(50, 50, 500, 400)

    done = False
    while not done:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                done = True

        all_sprites.add(Ball(screen_rect))
        all_sprites.update()

        screen.fill((20, 50, 90))
        all_sprites.draw(screen)

        # Update only the area that we specified with the `update_rect`.
        pg.display.update(update_rect)
        clock.tick(60)


if __name__ == '__main__':
    pg.init()
    main()
    pg.quit()

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将矩形传递到 pygame.display.update() 中以更新窗口的特定区域? 的相关文章

  • iter(fp.readline, '') 中的行而不是 fp 中的行:

    我读了内置函数iter的例子在内置函数 Python 3 7 0 文档 https docs python org 3 library functions html iter with open mydata txt as fp for l
  • Pygame 旋转射击

    我和几个朋友一直在编写一种有趣的新射击机制 为了让它发挥作用 我们需要朝玩家面对的方向射击 Sprite 正在使用 Pygame Transform Rotate 进行旋转 我们怎样才能找到一个角度 然后朝那个方向发射子弹呢 这是我们的精灵
  • ModuleNotFoundError:没有名为“googleapiclient”的模块

    如果这是一个愚蠢的问题 我深表歉意 我在 stackoverflow 上搜索过 但没有找到解决办法 我正在致力于从 Python 2 7 迁移到 Python 3 8 我收到一个程序的以下错误 请帮我 Traceback most rece
  • Scrapy在页面上找不到表单

    我正在尝试编写一个自动登录的蜘蛛这个网站 https www athletic net account login ReturnUrl 2Fdefault aspx 但是 当我尝试使用scrapy FormRequest from resp
  • Python - 元类装饰器 - 如何使用@classmethod

    我有以下 Python 元类 它添加了deco with args每个类的装饰器 def deco with args baz def decorator func return func return decorator class Fo
  • 日期时间:打印为秒

    我有一个datetime目的 我想将其打印为秒数 即 1 分 30 5 秒应打印为 90 5 秒 似乎找不到办法做到这一点strftime 我认为对于您的情况 您最好使用 datetime timedelta 对象 它有一个函数可以完全满足
  • Python - 可编辑 Gtk.TreeView 单元格中的自动完成

    我最近在 QTable 中使用 QComboBox 编写 PyQt 代码 QComboBox 默认启用自动完成功能 我想尝试用 Gtk3 在 Python3 中重现这个 我遇到过这个例子 Gtk TreeView 中的 Gtk Entry
  • 如何在迭代时使用 .delete() 删除 numpy 中的特定数组?

    首先 我读过这个问题 https stackoverflow com questions 1642730 how to delete columns in numpy array 我有一个 np array 来自图片 255 255 255
  • 从 Windows 任务计划程序在虚拟环境中运行 python 脚本

    我正在尝试通过 Windows 任务计划程序设置重复的 Python 任务 当我输入 python exe 的路径并将脚本的路径作为参数提供给 Windows 任务计划程序时 我已经成功了 参见下面的屏幕截图 但是 我希望能够选择一个特定的
  • Python PIL 标签中的图像自动调整大小

    我正在尝试制作一个小部件来保存图像 该图像将自动调整大小以适合其容器 例如如果直接打包到窗口中 则扩展该窗口将扩展图像 我有一些半功能的代码 但我必须在其中一个例程中添加几个常量 以防止自动调整大小重新触发自身 导致其大小不断增长 我确信这
  • 来自 pandas 数据帧的共同出现矩阵

    Problem 我有一个 pandas 数据框 我需要计算数据框中每个唯一条目出现在每个其他条目的同一行中的行数 相关但不同的帖子 Python 中单词列表的共现矩阵 https stackoverflow com questions 42
  • 从 nowgoal 获取表值出现索引错误

    我对刮擦很陌生 我收到的链接来自nowgoal http www nowgoal3 com 下面是我如何开始导航到上面的页面 我不希望获得所有比赛的链接 但我会有一个输入文本文件 它是附在这里 https drive google com
  • 无需安装即可获取给定源目录的 python3 包元数据

    我正在尝试获取一些包元数据 名称 版本 并给出源目录的路径 而不安装所述包 这些工作 使用setup py如果您位于根目录中 gt python3 setup py name my package name gt python3 setup
  • selenium 4.0.0b4:“无法打开新选项卡 - 没有打开浏览器”

    我有 chrome 和 chromedriver 91 0 4472 101 selenium python 4 0 0b4 如果我启用永久用户配置文件 以下代码尝试通过 switch to new window 打开新选项卡会失败 注释掉
  • 如何解决:尝试在没有已知父包的情况下进行相对导入[重复]

    这个问题在这里已经有答案了 我有一个简单的项目结构 其中大部分是空的 python 文件 以便测试在线教程中的概念 project package1 init py module1 py package2 init py module2 p
  • 在数据类上的自定义“__init__”重写中调用生成的“__init__”

    目前我有这样的事情 dataclass frozen True class MyClass a str b str c str d Dict str str 这一切都很好 除了dicts 是可变的 所以我不能使用我的类来键入另一个字典 相反
  • SGC GUI 和 Pygame Widget 实现

    您好 我正在尝试使用 Pygame 编写一个简单的应用程序 我进行了各种搜索 发现获取用户输入的最佳方法是使用第 3 方 GUI 我为此目的找到了简单的游戏代码 下面 您可以找到我的基本代码 它在脚本的同一路径中查找图像并在屏幕上按顺序替换
  • 从 STEP 文件中提取体积

    我的目标是编写一个Python程序来提取物体的体积STEP文件 我找到了步骤实用程序 https pypi org project steputils and 奥交换 https pypi org project aocxchange 是
  • 尝试在Python3.6中实现`signal.CTRL_C_EVENT`

    我正在阅读有关信号的内容并尝试实施signal CTRL C EVENT 据我了解 如果用户在程序运行时按 CTRC C 将发送一个信号来终止程序 我可以将程序指定为参数吗 我尝试测试用法 import sys import signal
  • GCP - 获取有关存储桶的完整信息

    我需要获取存储在Google Bucket中的文件信息 信息如文件大小 存储类别 上次修改时间 类型 我搜索了谷歌文档 但它可以通过curl或控制台方法来完成 我需要从 Python API 获取该信息 例如下载 blob 将 blob 上

随机推荐