我的快速测试表明pygame比pysdl2快100倍



所以我一直在用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()

注意事项:我几天前刚刚开始使用SDL2

在pygame中,你要进行100次闪电战,但只有一次屏幕更新使用pygame.display.flip()

在SDL2版本中,您要执行100次渲染操作,我认为这会执行blit和屏幕更新。没有像pygame那样单独调用来更新屏幕,所以如果您得到任何输出,这意味着渲染是一个组合操作。

要进行检查,请从pygame中删除flip(),我敢打赌您会得到输出。

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

相关内容

  • 没有找到相关文章

最新更新