2017-11-02 6 views
3

スプライトの図形を描くのではなく、スプライトにイメージをロードするにはどうすればよいですか? 例:私はスプライトに50×50の画像をロードする代わりに、ここでは50×50の矩形Pygame - スプライトに画像をロードする

を描く私のスプライトのコードはこれまでです:グローバルスコープ内または別のモジュールで

class Player(pygame.sprite.Sprite): 

    def __init__(self, color, width, height): 

     super().__init__() 
     #Config 
     self.image = pygame.Surface([width, height]) 
     self.image.fill(WHITE) 
     self.image.set_colorkey(WHITE) 

      # Draw 
     pygame.draw.rect(self.image, color , [0, 0, width, height]) 

     # Fetch 
     self.rect = self.image.get_rect() 

    def right(self, pixels): 
     self.rect.x += pixels 
    def left(self, pixels): 
     self.rect.x -= pixels 
    def up(self, pixels): 
     self.rect.y -= pixels 
    def down(self, pixels): 
     self.rect.y += pixels 

答えて

3

まずload画像とそれをインポートします。 __init__メソッドでロードしないでください。それ以外の場合は、インスタンスを作成するたびにハードディスクから読み取らなければならず、遅いです。

今度は、グローバルIMAGEをクラス(self.image = IMAGE)に割り当てることができ、すべてのインスタンスがこのイメージを参照します。

import pygame as pg 


pg.init() 
# The screen/display has to be initialized before you can load an image. 
screen = pg.display.set_mode((640, 480)) 

IMAGE = pg.image.load('an_image.png').convert_alpha() 


class Player(pg.sprite.Sprite): 

    def __init__(self, pos): 
     super().__init__() 
     self.image = IMAGE 
     self.rect = self.image.get_rect(center=pos) 

あなたは、同じクラスの異なる画像を使用する場合は、インスタンス化中にそれらを渡すことができます。

class Player(pg.sprite.Sprite): 

    def __init__(self, pos, image): 
     super().__init__() 
     self.image = image 
     self.rect = self.image.get_rect(center=pos) 


player1 = Player((100, 300), IMAGE1) 
player2 = Player((300, 300), IMAGE2) 

convertまたはconvert_alpha(透明度とイメージ用)を使用する方法にblitのパフォーマンスを向上させます。


画像は、サブディレクトリ(例えば、「画像」)である場合、os.path.joinとのパスを構築する:

import os.path 
import pygame as pg 

IMAGE = pg.image.load(os.path.join('images', 'an_image.png')).convert_alpha() 
+0

私はすべてをコピーした画像が表示されなくなり、そのためのスプライトはちょうど現れます空白として – SnivyDroid

+0

Nvm私はそれが働くようになった、私はそれが働くために、カラーキーとsurface.fillコードブロックを削除する必要がありました、ありがとう! – SnivyDroid

関連する問題