3

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

1 回答 1

7

警告:SDL2我几天前才开始[in C]。

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

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

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

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

于 2016-01-02T05:14:00.720 回答