2017-03-19 9 views
0

パイガームディスプレイに.pngイメージをblitしたいとき、FPSが60から20に落とされているのを見ました。これを回避する手段があるのでしょうか? ?.png make pygame laggy

編集:私はちょうど)(.convert_alphaを試みたが、それは(約40 FPS今

menu = pygame.image.load("Ecran titre\\principal\\menu.png") 
clock = pygame.time.Clock() 

gameExit = False 

while not gameExit : 

    for event in pygame.event.get(): 
     if (event.type == pygame.QUIT): 
      gameExit = True 

    #gameDisplay.fill(0) 

    gameDisplay.blit(background,(0,0)) # background is a jpeg image with .convert() 

    gameDisplay.blit(menu,(0,0)) 
    pygame.display.update() 
    clock.tick(60) 
    pygame.display.set_caption("fps: " + str(clock.get_fps())) 

答えて

2

convert_alphaを起こっているのは)pygameの内の画像を管理する上で良い最初のステップです。画像をサーフェスにブリッティングすることはサーフェスをサーフェスにブリッティングするよりもはるかに遅いことを知っておくことも重要です。あなたが使用しようとしているすべてのイメージを自分のサーフェイスにあらかじめ描画しています。それから私はそれらの表面を画面に盛り付けます。

img_rect = get_image("my_image.png").get_rect() 
img_surface = pygame.Surface((img_rect.width, img_rect.height), pygame.SRCALPHA) 
img_surface.fill((0, 0, 0, 0)) 
img_surface.blit(get_image("my_image.png"), img_rect) 

が続いでゲームループ:例えば、以下のコードは、外ゲームループが起こる一般的に

gameDisplay.blit(img_surface, (x, y)) 

を、あなたはおそらくアウトできる限りをしたいですゲームループのこの場合、イメージを前処理し、より速い表面対面ブリットを実行します。

今後、pythonにcProfileを使用することを検討してください。それは実際にあなたがコードが遅くなっているのを正確に突き止めるのに役立ちます。すべての

Python getting meaningful results from cProfile

0

まず、あなたが前の回答で述べた「The4thIceman」のように、.convert_alpha()を使用する必要があります。ここではそれにいくつかの良い情報です。それは本当にあなたのコードをスピードアップすることができ、読み込まれたすべての画像に使用されるべきです。

第2に、マルチスレッドを使用する必要があります。マルチスレッドとは、プログラムが複数のものを同時に実行させる技術です。 Pythonには "スレッド"ライブラリが組み込まれています(ただし、Python 3では "_thread"だと思いますが)。これで簡単に実行できます。

https://docs.python.org/3/library/_thread.html