2

現在、画面に描画するタイルを決定する整数を保持する x x y 配列があります。(整数は、tile_arrブリットする私のタイルを選択します)

パフォーマンスを向上させるために、変更された int のみを再度ブリットする必要があります。

例 1:

たとえば、現在、次のようなものがあります。

tile_arr = [image1,image2,image3,image4]
arr = [[2,2,2],[2,2,2],[2,2,2]]

次に、ユーザーが何をするかによって、一部の値arrが変わる可能性があるため、次のように言いましょう。

arr[0][0]=1
arr[2][1]=1

これにより、配列が得られます。

arr=[[1,2,2],[2,2,2],[2,1,2]]

画面にブリットするとき、tile_arr画像番号 1,2,2 を一番上の行に、2,2,2 を真ん中の行に、2,1,2 を一番下の行にブリットします。配列を blit するときはscreen.blit、各値または arr に対して a を使用します。これは 9 つの blit です。ブリットは 2 回だけにしたい。( screen.blit2回のみ使用)

例 2:

tile_arr = [green.bmp, red.bemp, blue.bmp]
feild_arr = [[0,0,0], [0,0,0], [0,0,0]]

出力:

GGG

GGG

GGG

ユーザーのfeild_arr変更[[1,0,1], [0,2,0], [0,1,2]]

出力:

RGR

GBG

GRB

sceen.blit()ここで、何も変更されていないため、4 つの緑の正方形を緑のままにして、5 回だけ呼び出したいと思います。

最初の配列のコピーにすぎない別の配列を作成することを考えました。次に、それを実行し、新しいアレイと比較して何が変更されたかを確認しますが、これにはより適切で迅速な方法があると思います。今の例は 3x3 だけなので、重複した配列を作成することはそれほど悪くありませんが、私はもっと大きな配列を扱っており、30x20 配列をブリットするときは、取得できるすべてのショートカットが必要です。

配列内の整数値が変更された場合にのみブリットし、変更されていない値をスキップする (ブリットしない) にはどうすればよいですか?

4

1 に答える 1

1

変更された四角形のリストを呼び出して、screen.blit を 1 回だけ使用できます。

最善のアプローチは、DirtySprite から派生した独自のクラスを作成することだと思います。

class Cell: pygame.sprite.DirtySprite

画像と四角形を保持するための属性が既にあり、数値を保持する属性と、それをダーティとして設定する数値を変更するメソッドを追加できます。

その後、LayeredDirtyクラスを使用して、ダーティ スプライトを画面にレンダリングできます。

于 2012-06-04T20:44:57.237 に答える