2

Linux マシンで pygame を使用すると、新しい画像を継続的に読み込んで表示すると、プログラムの速度が低下します。

入力画像 (400x300) は、ファイル サイズを一定 (360K) に保つために PPM 形式になっています。これは、IO に影響を与えず、解凍の遅延を回避するためです。

1 秒あたり 50 フレームで始まり、約 2 分後には 1 秒あたり約 25 フレームになります。

import pygame    
pygame.init()    
clock = pygame.time.Clock()
screen = pygame.display.set_mode((800, 600),pygame.FULLSCREEN)   
frame=1

while 1:

    image = pygame.image.load(str(frame)+".ppm")    

    screen.blit(image,(0,0))
    pygame.display.flip()

    clock.tick(240)

    frame=frame+1
    if(frame%10==0):
        print(clock.get_fps())

フレームレートの一貫性を保つにはどうすればよいですか?

ほとんどの場合、ガベージ コレクションが必要なイメージへの古い参照と関係があります。そうでないかもしれない。

新しいオブジェクトを作成したり、ガベージコレクターをトリガーしたり、システムの速度を低下させたりすることなく、画像を継続的にロードする方法はありますか?

4

2 に答える 2

1

何週間も熟考した後、私は最終的にあなたの問題が何であるかを理解したと思います. 何らかの理由で、コンピュータは の古い値を記憶しているに違いありませんimage。ブリットする行の後に、

del image

完全にはわかりませんが、うまくいくかもしれません。

于 2012-12-30T22:34:23.103 に答える
0
import pygame    
pygame.init()    
clock = pygame.time.Clock()
screen = pygame.display.set_mode((800, 600),pygame.FULLSCREEN)   
frame=1

global image
image = pygame.image.load(str(frame)+".ppm")
#this image can be used again and again
#you can also give ////del image//// but it will load from the first so it takes time but using again and again doesn't do so
while 1:
     screen.blit(image,(0,0))
     pygame.display.flip()

     clock.tick(240)

     frame=frame+1
     if(frame%10==0):
        print(clock.get_fps()):
于 2020-05-06T18:06:16.593 に答える