当前位置:  开发笔记 > 编程语言 > 正文

我的快速测试表明pygame比pysdl2快100倍,怎么回事?

如何解决《我的快速测试表明pygame比pysdl2快100倍,怎么回事?》经验,为你挑选了1个好方法。

所以我一直在用pygame做游戏,但是性能太差了。经过大量搜索,我发现pygame是围绕SDL构建的,并且SDL2具有GPU支持,因此我想看看使用基于SDL2的东西是否可以提高性能。在将pygame与pySDL2库进行比较时,pygame的速度要快大约100倍...当然,我忽略了某些东西吗?

test_SDL2.py:

import os
os.environ["PYSDL2_DLL_PATH"] = os.path.dirname(os.path.abspath(__file__))

import sys, sdl2, sdl2.ext, time

sdl2.ext.init()
window = sdl2.ext.Window("test", size=(800, 600))
window.show()
factory = sdl2.ext.SpriteFactory(sdl2.ext.SOFTWARE)
sprite = factory.from_image("c:\\game\\gfx\\plus.png")

spriterenderer = factory.create_sprite_render_system(window)
while True:
    begin = time.time()
    for i in xrange(100):
        spriterenderer.render(sprite)
    print time.time() - begin

window.refresh()

test_pygame.py:

import pygame, time

img = pygame.image.load('gfx/plus.png')

screen = pygame.display.set_mode((800, 600))
while True:
    begin = time.time()
    for i in xrange(100):
        screen.blit(img, (i,i))
    print time.time() - begin
    pygame.display.flip()

Craig Estey.. 6

警告:SDL2几天前,我刚开始使用[C语言]。

在pygame中,您正在执行100次blit,但只有一个屏幕更新为pygame.display.flip()

在SDL2版本中,您执行了100次渲染操作,我认为这会进行blit 屏幕更新。与pygame一样,没有单独的调用来更新屏幕,因此,如果您获得任何输出,则意味着渲染是组合操作。

要进行检查,请flip()从pygame中删除,我敢打赌您没有任何输出。

然后,在循环flip() 移动,我敢打赌,性能会相似。



1> Craig Estey..:

警告:SDL2几天前,我刚开始使用[C语言]。

在pygame中,您正在执行100次blit,但只有一个屏幕更新为pygame.display.flip()

在SDL2版本中,您执行了100次渲染操作,我认为这会进行blit 屏幕更新。与pygame一样,没有单独的调用来更新屏幕,因此,如果您获得任何输出,则意味着渲染是组合操作。

要进行检查,请flip()从pygame中删除,我敢打赌您没有任何输出。

然后,在循环flip() 移动,我敢打赌,性能会相似。

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有