2

それで、私はあなたが懐中電灯を持っているこの小さなゲームを作っています. 懐中電灯は非常に高解像度であるため、すべての角度で 360 度のコピーを事前にキャッシュして、リアルタイムで回転させないようにする必要があります。これには多くの計算能力が必要です。画像は 1002x246 の .png ですが、非常にシンプルなので、ハード ドライブで 3.95KB しか占有しません。しかし、ゲーム内で 360 のコピーを作成してリストに追加すると、約 800MB の RAM が必要になります。それはかなり多いです。なんで?どうすれば減らすことができますか?

コード:

def flashlightinit():
    init.flashlights = []
    fl = files.flashlight
    for i in range(360):
        init.flashlights.append(pygame.transform.rotate(fl, -i))

懐中電灯の画像は convert() されており、カラーキーやアルファ チャネルはありません。

懐中電灯の表示:

def flashlightupdate(angle):
    screen.blit(init.flashlights[angle], (340 - init.flashlights[angle].get_width()/2, 360 - init.flashlights[angle].get_height()/2))

角度は度で、マウスの位置とプレイヤーの位置から計算されます。

ありがとう。

4

2 に答える 2

3

いくつかのコメントをグループ化すると、おそらくメモリとパフォーマンスの問題の両方を解決できるため、これを回答として公開します。

Dikei が指摘したように、RAM 使用率が高いのは画像の数 (360) によるもので、ディスク上でも少なくとも266MB を占めるため、画像は pygame オブジェクトとして表されるため、より多くのメモリを使用することを考慮する必要があります。生のビットマップ。

800MB の RAM を使用しないようにするには、明らかに、これらすべてのイメージを作成しないようにする必要があります。

良好なパフォーマンスを維持するには、0 ~ 90° の一部の画像のみをキャッシュし、回転よりもかなり高速なフリップ操作を使用して、他の回転角度の画像を作成します (halex で指摘されているように)。

この方法では、確実に現在の RAM の約 1/4 を消費しても、同等のレンダリング速度を維持できます。

于 2012-08-31T12:01:41.157 に答える
2

多くの回転が必要な場合は、pyOpenGL 長方形を作成し、テクスチャを懐中電灯に設定します。次に、それを回転させます。

ウィンドウの作成/入力には pygame を使用し、OpenGL テクスチャには pygame サーフェスを使用するか、Pyglet または別のソリューションを使用できます。

于 2012-09-04T01:58:44.467 に答える