首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pygame简单循环在Mac上运行得非常慢。

Pygame简单循环在Mac上运行得非常慢。
EN

Stack Overflow用户
提问于 2015-04-23 21:04:54
回答 2查看 2.3K关注 0票数 8

E:在OS和Linux上测试相同的之后,我可以确定以下情况只发生在OS上。有什么解释吗?多亏了TextMate,我更喜欢在Mac上进行开发。

这里有一个简单的循环,它几乎什么也不做,而且运行速度仍然很慢。有人能解释原因吗?FPS平均在略高于30,它需要一个略超过30毫秒的每一个通过循环。窗口大小似乎根本不影响这一点,因为即使设置一个很小的窗口大小,如(50,50)有相同的fp。

我觉得这很奇怪,我希望任何当代的硬件都能为这样一个简单的循环做一千fps,即使我们每次更新每个像素。从我的个人资料中我可以看到,{built-in method get}{built-in method update}加起来似乎每次通话都要花费大约30 is的时间,这真的是我们不用脏的直肠就能出去的最好方法吗?

代码语言:javascript
复制
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()

下面是主函数的cProfile的开头。

代码语言:javascript
复制
         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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-04 18:16:10

最终的答案是,在OS下的视网膜显示是分化的因素。即使在同一台Mac上的外部显示上运行它也很好。但是把窗户移到视网膜显示器上会使它变得迟钝。是否有外部监视器连接。

另一方面,它在Linux下同样的视网膜显示器上运行得很好。目前还不清楚显示管理器/呈现的区别是什么导致了这一点,但我怀疑人们是否可以对此采取任何措施。

票数 7
EN

Stack Overflow用户

发布于 2018-11-18 20:07:47

把游戏分辨率改为全屏帮助我。试试这个:

代码语言:javascript
复制
window = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)

而不是:

代码语言:javascript
复制
window = pygame.display.set_mode((winx, winy))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29834292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档