2

シリアルポート経由でデータを取り込み、画面を更新する簡単なプログラムをPythonで書いています。

このプログラムは、どのコンピュータで実行しても同じように表示され、フルスクリーンである必要があるため、640、480 の小さなウィンドウにすべてを描画し、それをフルスクリーン ウィンドウに拡大するというアイデアがありまし。フレームを更新する時間。

これにより、テキストなどのすべてのオフセットを同じに保つことができます。また、これは非常に遅いことがわかります。

コードの重要な部分は次のようになります。

window = pygame.display.set_mode((1920, 1080),pygame.FULLSCREEN)    
screenPrescaled=pygame.Surface((640,480))

clock=pygame.time.Clock()


while iterations<400:
#Blit all the stuff to the prescaled surface here
    screenPostscaled=pygame.transform.scale(screenPrescaled,(1920, 1080))
    window.blit(screenPostscaled,(0,0))
    pygame.display.flip() 
    iterations+=1
    clock.tick(40)

これは、よりもはるかに遅く実行されます40fps

画面上のすべてがテキストまたは線のいずれかであり、画像はロードされていません。私は愚かなことをしていると思います。

「汚い四角形」しか更新できないことはわかっていますが、もっと基本的なものが欠けているのではないかと思います。

前もって感謝します!

4

3 に答える 3

3

window を対象面として使用することで、ブリットを 1 つ保存できます。

pygame.transform.scale(screenPrescaled, (1920, 1080), window)

それでも遅すぎる場合は、四角形の更新を使用する必要があります。画像 1920/640 および 1080/480 を拡大縮小するのと同じ係数を使用して拡大縮小できます。

于 2012-07-05T17:50:31.530 に答える
2

最も簡単なことは、使用する代わりに

pygame.display.flip()

使用することです

pygame.display.update()

それほど大きな違いではありませんが、特に多くの写真を使用する場合、私のゲームではかなりうまく機能しました.

于 2012-11-26T01:15:05.420 に答える
1

で巨大な画面を更新していますdisplay.flip()。SDL (およびそれは pygame の背後にあります) では、これは良い考えではありません (フリップを置いてすべてを削除してみて、それがどれだけ速く実行されるかを確認してください。それほど速くはなりません)。

測定する方法はありませんが、コードに時間がかかる理由は.flip().

あなたは 640x480 のデータしか扱っていないのに、なぜこれほど巨大なサイズにスケールアップしているのですか? 画面を 640x480 に設定してみて、どのくらい速くなるか見てみましょう。4 倍か 5 倍高速に実行されるはずです。

于 2012-07-05T17:30:36.400 に答える