Pyglet 使用过多的 cpu

2023-12-03

我最近开始从 pygame 开始接触 pyglet 和 rabbyt,但我遇到了一些障碍。

我创建了一个基本示例,其中一个 Sprite(在 pyglet.sprite.Sprite 中找到的类型)以每秒 60 帧的速度显示。问题是这个简单的程序不知何故占用了 50% 的 CPU 时间。我用rabbyt库中找到的精灵类型重复了实验,得到了相同的结果。

我决定以每秒 60 帧的速度渲染 1000 个精灵,然后渲染 10000 个精灵,令我惊讶的是 CPU 使用率保持在 50%。唯一的问题是移动或动画精灵会导致轻微的卡顿。

最后,我尝试以每秒 360 帧的速度运行。使用 50% 时结果相同。

这是示例代码:

import pyglet
import rabbyt


def on_draw(dt):
    window.clear()
    spr.render()

global window
window = pyglet.window.Window(800, 600)
spr = rabbyt.Sprite('ship.png')
spr.x = 100
spr.y = 100
pyglet.clock.schedule_interval(on_draw, 1.0/60.0)


if __name__ == '__main__':
    pyglet.app.run()

我使用的是 Core 2 Duo 和 ATI HD 3500 卡。

任何建议/想法表示赞赏。


请注意,默认的 pyglet 事件处理程序每​​次清除事件队列时都会触发“on_draw”事件。

http://www.pyglet.org/doc/programming_guide/the_application_event_loop.html

pyglet 应用程序事件循环在窗口事件发生时调度它们(例如鼠标和键盘输入),并在每次循环迭代后将 on_draw 事件调度到每个窗口。

这意味着任何事件都可以触发重绘.

因此,如果您移动鼠标或执行任何触发事件的操作,当它开始触发渲染调用时,速度会大幅减慢。

这也引起了问题,因为我正在执行自己的渲染调用,所以我会得到两个缓冲区的争用,从而在屏幕上产生“幽灵”效果。我花了一段时间才意识到这就是原因。

我猴子修补了事件循环以不这样做。https://github.com/adamlwgriffiths/PyGLy/blob/master/pygly/monkey_patch.py

请注意,这个修补后的事件循环将不再单独渲染,您必须手动翻转缓冲区或触发“on_draw”事件。

可能的情况是,虽然您已经以 60 fps 的速度连接,但内部渲染循环正在以最大可能的速率运行。

我不喜欢夺走控制权的代码,因此我的补丁让我决定渲染事件何时发生。

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

Pyglet 使用过多的 cpu 的相关文章

随机推荐

  • 在 Java case 语句中使用变量

    我正在为计算器制作一个表达式解析器 表达式将包含一个变量 例如 用户可以输入 x 2 或 y 2 我有一个 switch 语句 switch 语句中的一种情况在检测到变量时执行特定操作 case variableSymbol if expr
  • 用 Numba 优化整数元组集合的字典?

    我正在学习如何使用 Numba 虽然我已经相当熟悉 Cython 我应该如何加速这段代码 请注意 该函数返回一个由整数二元组集合组成的字典 我正在使用 IPython 笔记本 相比 Cython 我更喜欢 Numba autojit def
  • 核心数据 NSFetchRequest setResultType:NSDictionaryResultType 不起作用

    将 NSFetchRequest 结果类型设置为 NSDitinaryResultType 时 将返回零个对象 如果我删除 setPropertiesToFetch 和 setResultType 则会返回所有对象 有任何想法吗 NSFet
  • 使用 PHP 和 JavaScript 下载状态

    我目前正在研究一种在页面上显示文件下载状态的方法 我知道这是不需要的 因为用户通常在浏览器中具有下载状态 但我想让用户保持在他正在下载的页面上 只要下载是持久的 为此 下载状态应与文件实际状态匹配 而不是假进度条 也许它还会显示用户下载的速
  • JavaFX - 如何获取选项卡、按钮等的背景颜色

    问题描述 我无法获取 JavaFX 中对象的背景 我指的不是形状 而是普通节点 如按钮 选项卡等 我不知道如何访问他们的背景颜色 我想要的是 我正在开发 IDE 我想在选项卡上运行彩色动画 其中包含用户想要打开且已存在于程序文件集合中的文件
  • 根据嵌套列表中特定索引处的元素过滤列表

    我有一个列表 其中包含 4 2 3 4 G 2 4 1 2 H 8 7 5 4 G 我想通过以下方式从列表列表中获取值参考第三部分中的字母表列表列表中的每个列表 例如 我想要 python 打印元素由字母 G 代表对于列表列表中的每个项目
  • 解析 JSON 对象中的 JSON 数组

    我有一些具有以下结构的 JSON source name john age 20 name michael age 25 name sara age 23 我将此 JSON 字符串命名为mainJSON 我尝试使用以下 Java 代码访问元
  • 尝试以访问权限禁止的方式访问套接字

    我在 HostGator 上有一个网站 还有一个我自己运行 SQL Server 2008R2 的专用服务器 我使用的连接字符串是 X X X X 1433 它指向我的专用服务器的 IP 地址 我已经在我的服务器上进行了防火墙设置 以便我可
  • 使用 Implode 将 HTML 表单 $_POST 数组插入 MySQL

    我有以下 html 提交表单 这种形式是 PHP SELF 并将输入数据作为数组存储在 POST 中
  • Android从线程id获取联系人id

    我正在开发一个简单的短信应用程序 并且在加载线程列表时使用下面的代码来获取线程 id 但我不知道如何使用线程 id 获取联系人 id 我是 root 并使用 root 资源管理器 我可以在数据库中看到一个联系人表 其中包含以下列 threa
  • 如何将此 Ruby 字符串转换为数组?

    将以下 Ruby 字符串转换为数组的最佳方法是什么 我使用的是 ruby 1 9 2 Rails 3 0 11 导轨控制台 gt Item first ingredients gt Bread whole wheat 100 slice E
  • 如何在不知道 JobObject 名称的情况下获取 JobObject 的句柄?

    我的应用程序正在作业中运行 我想使用以下方法获取此 Jobobject 的句柄OpenJobObject这样我以后就可以使用这个手柄了 问题是 我不知道作业名称 并且将 NULL 传递给作业名称时会返回错误 87 参数不正确 这就是我尝试的
  • spring cloud zuul“路径”:“/actuator/routes”404未找到

    我使用 Spring Cloud 我想配置 Zuul zuul服务的application yml是 server port 5555 Setting logging levels logging level com netflix WAR
  • React-native:多次重新加载 JS 后图像丢失

    不知道其他人是否也遇到这个问题 我有一个简单的页面 其中包含几张图像 当我第一次启动应用程序时 一切都加载得很好 然而 在我重新加载JS几次后 图像开始随机消失 如果我关闭应用程序并重新开始 如果我重新加载 JS 它将恢复正常并重复该问题
  • 面向对象设计:保存复杂对象

    我有一个建立在遗留系统之上的复杂域模型 我已经为其构建了大部分 获取 方法 通常只是通过传递数据库主键 ID 来实现 很容易 我现在很好奇如何完成在数据库中创建新对象并使用新数据保存现有对象的任务 并希望确保我涵盖了所有基础 整个项目中与数
  • Angular:从动态组件传回数据

    基于一个example在食谱中 我正在动态创建组件 如下所示 private loadComponent void const componentFactory this factoryResolver resolveComponentFa
  • 如何使用 sed 将一个文件中的模式替换为另一个文件的内容?

    可以说我有fileA 与内容 Hello this is some random text REPLACEHERE and some more random text and fileB与内容 stuff that goes into fi
  • 样式未在 Windows Server 上加载

    我这里有一个 WPF 应用程序 其中有很多自定义样式 在 Windows 7 或 8 1 中 应用程序看起来非常好 但是 如果应用程序在 Windows Server 2008 2012 上启动 则应用程序看起来某些样式未加载或某些属性未设
  • 查询和过滤 MongoDB 中的键名而不是值

    我想从集合中查找部分匹配某个字符串的所有键名称 我得到的最接近的是检查某个密钥是否存在 但这是完全匹配的 db collection find fkClientID exists 1 我想获得所有以fk反而 你可以使用映射减少 要仅获取根级
  • Pyglet 使用过多的 cpu

    我最近开始从 pygame 开始接触 pyglet 和 rabbyt 但我遇到了一些障碍 我创建了一个基本示例 其中一个 Sprite 在 pyglet sprite Sprite 中找到的类型 以每秒 60 帧的速度显示 问题是这个简单的