3

画像があるpygameの表面のサイズを変更するにはどうすればよいですか(スケーリングではありません)。pygame に画像をロードすると、表面が画像のサイズになります。サーフェスのサイズをフレーム (スプライト シート) のサイズに変更する必要があります。

問題を解決するために使用したコードは次のとおりです(Chris Dennettに感謝):

self.surface = pygame.Surface((20, 20))
self.surface.blit(pygame.image.load(imageName).convert_alpha(), (0,0), (0, 0, frameWidth, frameHeight))
4

2 に答える 2

4

スプライト シートの場合、2 つの適切なオプションがあります。

1) スプライトシートを 1 つの Surface として読み込みます。

ブリットするときは、source rect 引数を使用します。これにより、シートから 1 つのフレームだけがブリットされます。

2) サブサーフェスを使用します。

スプライトシートを 1 つの Surface として読み込みます。必要な各フレームのサブサーフェスをロードします: http://www.pygame.org/docs/ref/surface.html#Surface.subsurface

あなたに関する限り、サブサーフェスはセルの幅と高さを持つ「新しい」サーフェスです。しかし、それは重複した記憶ではありません。リンクされています。

ドキュメントから:

新しい親とピクセルを共有する新しい Surface を返します。新しい Surface は元の子と見なされます。いずれかの Surface ピクセルを変更すると、相互に影響します。クリッピング エリアやカラー キーなどのサーフェス情報は、各サーフェスに固有です。

于 2011-09-22T03:58:24.150 に答える
3

必要な幅と高さ (スプライトの大きさ) を引数として渡して、新しいサーフェスを作成します。次に、を使用しますnewsurf.blit(spritesheet, (0, 0), (posX, posY, newsurf.getWidth(), newsurf.getHeight()))。動作するはずです。次に、newsurf をスプライトとして使用できます。スプライトシートでそれぞれブリットしたい x と y にする必要がありますposXposY

于 2011-06-26T21:25:55.460 に答える