- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我最近开始从 pygame 进入 pyglet 和 rabbyt,但我遇到了一些障碍。
我创建了一个基本示例,其中一个 Sprite(在 pyglet.sprite.Sprite 中找到的类型)以每秒 60 帧的速度显示。问题是这个简单的程序以某种方式占用了 50% 的 CPU 时间。我用在 rabbyt 库中找到的 Sprite 类型重复了实验,结果相同。
我决定以每秒 60 帧的速度渲染 1000 个和 10000 个 Sprite ,令我惊讶的是 CPU 使用率保持在 50%。唯一的问题是移动或动画 Sprite 会导致轻微的卡顿。
最后,我尝试以每秒 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()
我正在使用带有 ATI HD 3500 卡的 Core 2 Duo。
欢迎任何建议/想法。
最佳答案
请注意,默认的 pyglet 事件处理程序会在每次清除事件队列时触发“on_draw”事件。
http://www.pyglet.org/doc/programming_guide/the_application_event_loop.html
The pyglet application event loop dispatches window events (such as for mouse and keyboard input) as they occur and dispatches the on_draw event to each window after every iteration through the loop.
这意味着任何事件都可以触发重绘。
因此,如果您四处移动鼠标或做任何会触发事件的事情,当它开始触发渲染调用时,您的速度会大幅下降。
这也导致了问题,因为我正在执行自己的渲染调用,因此我会导致两个缓冲区发生冲突,从而在屏幕上产生“重影”效果。我花了一段时间才意识到这是原因。
我猴子修补了事件循环,不这样做。 https://github.com/adamlwgriffiths/PyGLy/blob/master/pygly/monkey_patch.py
请注意,此修补后的事件循环将不再自行呈现,您必须手动翻转缓冲区或触发“on_draw”事件。
可能是这样的情况,虽然您以 60fps 的速度连接,但内部渲染循环正在以最大可能的速率滴答作响。
我不喜欢剥夺控制权的代码,因此我的补丁让我决定渲染事件何时发生。
关于python - Pyglet 使用过多的 CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10524093/
我正在使用Python 2.6.6和pyglet 1.1.4。在我的“Erosion”文件夹中,有“Erosion.py”和一个名为“Images”的文件夹。在图像内部,有.png图像。一幅图像被命名
我有一个奇怪的问题。当 pyglet 应用程序启动时,它只绘制 1-2 帧然后卡住。 on_draw 事件刚刚停止发生。但是每次我移动鼠标或按键时,on_draw 事件也会调度。简而言之,我必须移动鼠
我有一个应用程序正在创建名为 Pizza Clicker 的 Cookie Clicker 的替代版本。它非常基本,但运行速度非常慢,我不明白为什么。 import pyglet window = p
因此,在我们的游戏中使用 Tkinter 后,我们决定转向 Pyglet。但我遇到的问题之一是运动,在 Tkinter 中我能够制作一个平滑的运动系统,但在 pyglet 中我所能做的就是让角色以一种
我正在使用 pyglet 的 Player 类在 python 中编写一个音频播放器。该模块只是对 Player 和 Source 类的测试,它不会产生任何结果。没有声音,没有错误,只有一个关于垂直同
我正在尝试使用 pyglet 制作一个简单的 GUI。 这是我的代码: button_texture = pyglet.image.load('button.png') button = pyglet
考虑以下示例: import pyglet def foo(): print("I'm in a loop...") def main(): w = pyglet.window.Win
我正在使用 pyglet (OpenGL) 库,我希望能够在不改变窗口大小的情况下改变虚拟分辨率。例如,一个 2x2 的框将在屏幕上绘制为 4x4 像素。我知道我可以找到正在绘制的所有内容并单独对其进
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我非常喜欢 pyglet,但是抽象的基本单位是坐标向量,这很笨拙,而且不是我在设计复杂场景时想要的抽象级别。 是否有任何库“通常”与 pyglet 一起使用来管理形状并将它们组合到场景中?每个人都从头
我有一个用于在屏幕上显示文本的标签元素: nameLabel = pyglet.text.Label(name, font_name='Tahoma', x=50, y=50, font_size=1
我正在使用 pyglet 编写心理物理学实验。我使用的电脑有两个显示器。它们被配置为两个独立的 Xscreens,0 和 1,分别对应于我的工作站监视器和实验屏幕。我想让 pyglet 绘制到实验屏幕
在我使用 Python 和 pyglet 的游戏中,我有将事件向下传播到其成员的组: class Group(EventDispatcher): def __init__(self):
我制作了两个立方体视口(viewport),但它们都是正面正交投影,我需要其中一个来自侧面。这是绘图代码draw_small 正在绘制小型静态立方体dwar_big是大立方体的绘制,可以移动、缩放和旋
我目前正在开发一个项目,我一直在尝试将 pyglet 库中的标签字体更改为我在网上找到的字体,但我无法让它工作。我尝试在网上搜索一个小时,但似乎没有任何效果。添加了一些代码供引用: font.add_
所以我是一名 Python 初学者程序员,我一直在使用 pyglet,如果您运行此代码,我发现了一个问题: from pyglet.gl import * window = pyglet.window
我已经阅读了我能找到的所有内容,并查看了 pyglet 上游戏循环的许多示例,但我仍然不确定它是如何工作的或到底发生了什么。 (这些是我读过的文章...) http://www.pyglet.org/
我正在使用 Pyglet,并且我有一个包含在背景上移动的对象的小东西。它们都由图像(png 和 jpg)表示。 我创建了一个大小为 800x600 的非全屏窗口,它工作正常,但是当我切换到全屏时...
好吧,所以我对 pyglet 和 OpenGL 来说都是个新手,我想知道为什么这不起作用: def DrawCircle(cx, cy, r, segments): theta = 2*3.14159
我正在尝试使用 Pyglet 通过 OpenGL 渲染图像。到目前为止,我已经能够设置帧缓冲区和纹理、渲染到其中并将其保存为 PNG 图像。但我不知道如何使用 Pyglets 字体渲染。 import
我是一名优秀的程序员,十分优秀!