Pygame 简单循环在 Mac 上运行速度非常慢

编程入门 行业动态 更新时间:2024-10-22 10:48:10
本文介绍了Pygame 简单循环在 Mac 上运行速度非常慢的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

E: 在 OS X 和 Linux 上进行了相同的测试后,我可以确认以下情况只发生在 OS X 上.在 Linux 上,它确实以 1000 fps 的速度运行,正如我碰巧想知道的那样.有什么解释吗?感谢 TextMate,我更喜欢在 Mac 上开发.

E: After testing the same on OS X and Linux, I can confirm that the following only happens on OS X. On Linux it literally runs at a thousand fps, as I happened to wonder. Any explanation? I would much prefer developing on Mac, thanks to TextMate.

这是一个几乎什么都不做的简单循环,但仍然运行得很慢.谁能解释为什么?FPS 平均略高于 30,每次通过循环需要 30 多毫秒.窗口大小似乎完全没有影响,因为即使设置像 (50,50) 这样的小窗口大小也具有相同的 fps.

Here's a simple loop that does almost nothing, and still runs very slowly. Can anyone explain why? FPS averages at little over 30, it takes a little over 30ms for each pass over the loop. Window size does not seem to affect this at all, as even setting a tiny window size like (50,50) has the same fps.

我觉得这很奇怪,我希望任何现代硬件都可以为这样一个简单的循环执行 1000 fps,即使我们每次都更新每个像素.从配置文件中我可以看到 {built-in method get} 和 {built-in method update} 结合起来似乎每次调用需要大约 30 毫秒的时间,真的吗?在不使用脏矩形的情况下,我们能得到最好的结果吗?

I find this weird, I would expect that any contemporary hardware could do a thousand fps for such a simple loop, even when we update every pixel every time. From the profile I can see that {built-in method get} and {built-in method update} combined seem to take around 30ms of time per call, is that really the best we can get out without using dirty rects?

pygame.init() clock = pygame.time.Clock() fps = 1000 #milliseconds from last frame new_time, old_time = None, None done = False while not done: clock.tick(fps) for event in pygame.event.get(): if event.type == pygame.QUIT: done = True # show fps and milliseconds if new_time: old_time = new_time new_time = pygame.time.get_ticks() if new_time and old_time: pygame.display.set_caption("fps: " + str(int(clock.get_fps())) + " ms: " + str(new_time-old_time)) pygame.display.update()

这是 main 函数的 cProfile 的开头.

Here's the beginning of a cProfile of the main function.

94503 function calls (92211 primitive calls) in 21.011 seconds Ordered by: cumulative time ncalls tottime percall cumtime percall filename:lineno(function) 1 0.026 0.026 21.011 21.011 new_main.py:34(main) 652 14.048 0.022 14.048 0.022 {built-in method get} 652 5.864 0.009 5.864 0.009 {built-in method update} 1 0.444 0.444 0.634 0.634 {built-in method init} 651 0.278 0.000 0.278 0.000 {built-in method set_caption} 72/1 0.000 0.000 0.151 0.151 <frozen importlib._bootstrap>:2234(_find_and_load) 72/1 0.000 0.000 0.151 0.151 <frozen importlib._bootstrap>:2207(_find_and_load_unlocked) 71/1 0.000 0.000 0.151 0.151 <frozen importlib._bootstrap>:1186(_load_unlocked) 46/1 0.000 0.000 0.151 0.151 <frozen importlib._bootstrap>:1122(_exec) 46/1 0.000 0.000 0.151 0.151 <frozen importlib._bootstrap>:1465(exec_module) 74/1 0.000 0.000 0.151 0.151 <frozen importlib._bootstrap>:313(_call_with_frames_removed) 54/1 0.004 0.000 0.151 0.151 {built-in method exec} 1 0.000 0.000 0.151 0.151 macosx.py:1(<module>) 1 0.000 0.000 0.150 0.150 pkgdata.py:18(<module>) 25/3 0.000 0.000 0.122 0.041 <frozen importlib._bootstrap>:1156(_load_backward_compatible) 8/1 0.026 0.003 0.121 0.121 {method 'load_module' of 'zipimport.zipimporter' objects} 1 0.000 0.000 0.101 0.101 __init__.py:15(<module>) 1 0.000 0.000 0.079 0.079 config_reader.py:115(build_from_config) 2 0.000 0.000 0.056 0.028 common.py:43(reset_screen) 2 0.055 0.027 0.055 0.027 {built-in method set_mode} 72/71 0.001 0.000 0.045 0.001 <frozen importlib._bootstrap>:2147(_find_spec) 70/69 0.000 0.000 0.043 0.001 <frozen importlib._bootstrap>:1934(find_spec) 70/69 0.001 0.000 0.043 0.001 <frozen importlib._bootstrap>:1902(_get_spec) 92 0.041 0.000 0.041 0.000 {built-in method load_extended} 6 0.000 0.000 0.041 0.007 new_map.py:74(add_character) 6 0.000 0.000 0.041 0.007 new_character.py:32(added_to_map) 6 0.001 0.000 0.041 0.007 new_character.py:265(__init__) 1 0.000 0.000 0.038 0.038 macosx.py:14(Video_AutoInit) 1 0.038 0.038 0.038 0.038 {built-in method InstallNSApplication} 1 0.036 0.036 0.036 0.036 {built-in method quit} 65 0.001 0.000 0.036 0.001 re.py:277(_compile) 49 0.000 0.000 0.036 0.001 re.py:221(compile)

推荐答案

这个问题的答案最终是 OS X 下的视网膜显示是差异化因素.即使在同一台 Mac 上的外部显示器上运行它也能正常工作.但是将窗口移到视网膜显示器上会使它变得迟钝.连接或不连接外部显示器.

The answer to this ended up being that the retina display under OS X is the differentiating factor. Running it even on an external display on the same Mac works fine. But moving the window to the retina display makes it sluggish. With or without an external monitor connected.

另一方面,它在 Linux 下的同一视网膜显示器上运行得很好.目前尚不清楚导致这种情况的显示管理器/渲染的差异是什么,但我怀疑人们对此有什么办法.

On the other hand, it runs just fine on the same retina display under Linux. It is unclear what the difference in the display managers / rendering is that causes this, but I doubt there is anything one could do about it.

更多推荐

Pygame 简单循环在 Mac 上运行速度非常慢

本文发布于:2023-11-29 00:45:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1644620.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:运行速度   简单   Pygame   Mac

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!