2017-04-05 4 views
2

スプライトモジュールのGroupクラスを使用してスプライトの領域または部分を描画しようとしています。PygameでGroupクラスを使用してスプライトの領域または部分を描画する

だから私は私のスプライトを処理するために、このクラスを持っている:(。...はい、pygameのダウンロードがすでにインポートされた)

class Sprite(pygame.sprite.Sprite): 
    def __init__(self, player): 
     pygame.sprite.Sprite.__init__(self) 

     self.image = pygame.image.load(player) 
     self.image = pygame.transform.scale(self.image, (300, 75)) 

     startPoint = (100, 500) 
     self.rect = self.image.get_rect() 
     self.rect.bottomleft = (startPoint) 

その後、私が使用してスプライトをアップロード:

someFile = Sprite(join('res', 'file.png')) 
spriteGroup = pygame.sprite.RenderUpdates(someFile) 

最後に、私はそれを使用して描画しますspriteGroup.draw(source)

私の問題は、私は元のファイルの小さな部分または部分だけを描画したいということです年齢。さて、私は、Surface.blit()を使って、描画するソースサーフェイスのより小さい部分を表すオプションの領域矩形を渡すことができることを知っています。それはパラメータのこの種を受け入れないよう

グループのサブクラスRenderUpdatesは、draw()方法を持っている...また、Surface.blit()は(私はそれを使用できたとしても)blit()予期しているためのオプションではありません描画する座標ソース、しかし私はすでに上から私のクラスでこれらを定義しました。

... (0, 0, 75, 75)などの引数を渡して、スプライトの最初のxとy、幅と高さをそれぞれ表すだけで、その部分だけを描画できますか?

答えて

1

ここに私が示唆しているものがあります。あなたの__init__関数の内部

  1. 、2つの変数に画像を保存します。 (自動的に画面に描画されるもの)、原画像にクリップを設定し、その新しいイメージを取得し、画像に保存:更新関数の内部そして

    # Stores the original image 
    self.ogimage = pygame.image.load(player) 
    self.ogimage = pygame.transform.scale(self.image, (300, 75)) 
    # Stores the image that is displayed to the screen 
    self.image = self.ogimage 
    
  2. 、。元画像の原点から測定されるように

    def update(self): 
        self.ogimage.set_clip(pygame.Rect(0, 0, 100, 100)) 
        self.image = self.ogimage.get_clip() 
    

あなたのスプライトの画像は、今のサイズ100×100です。 pygame.Rectset_clipの中であなたは好きなイメージを得ることができます。

+0

あなたは天才です!私はset_clip()について読んでいましたが、スプライトで元のイメージを使用する方法がわかりませんでした。ご協力ありがとうございました! –

0

私はそれを解決する方法を見つける。実際には、set_clip()メソッドは機能しません。ここで私の方法はimage.subsurfacedocです。

subsurface() 
    create a new surface that references its parent 
    subsurface(Rect) -> Surface 

コードでは、Rect(0,0,75,75)を描画するために次のコードを試すことができます。

class Sprite(pygame.sprite.Sprite): 
    def __init__(self, player): 
     pygame.sprite.Sprite.__init__(self) 

     self.original = pygame.image.load(player) 
     self.original = pygame.transform.scale(self.image, (300, 75)) 
     self.image = self.original.subsurface(Rect(0, 0, 75, 75)) 
     self.rect = self.image.get_rect() 

次に、あなたのupdate関数の内部でself.imageself.rectを更新します。

関連する問題