我的快速测试表明pygame比pysdl2快100倍,最近发生了什么?

时间:2016-01-02 04:26:16

标签: python pygame pysdl2

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

1 个答案:

答案 0 :(得分:5)

警告:我几天前刚开始[{1}} [在C]。

在pygame中,你正在做100个blits但只有一个屏幕更新SDL2

在SDL2版本中,你做了100次渲染操作,我认为这是一个blit 一个屏幕更新。没有单独的调用来更新屏幕,因为有pygame,所以如果你得到任何输出,这意味着渲染是一个组合操作。

要检查,请从pygame中删除pygame.display.flip(),我打赌你会得到 no 输出。

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