2017-12-17 2 views
1

私はプラットフォーマーを作っていて、バックグラウンドをブリッジするときに問題に遭遇しました。 私の現在のコードでは、ゲームループはフレームごとにゲームウィンドウに背景を描きます。これは単なる色ではない背景を使用したいときにゲームが実際に遅くなるようにします。 私の質問は、ゲームがそんなに遅くならないように、バックグラウンドを一度だけblitすることです(可能ならば)。ここでpygameで背景を一度だけblitする方法はありますか?

は、画像をブリッティングにつながる私のゲームのクラスの一部です:

class Game: 
    def __init__(self): 
     pg.init() 
     pg.mixer.init() 
     self.bg = pg.image.load("background.jpg") 
     self.screen = pg.display.set_mode((WIDTH, HEIGHT)) 
     pg.display.set_caption(TITLE) 
     self.clock = pg.time.Clock() 
     self.running = True 
     self.font_name = pg.font.match_font(FONT_NAME) 
     self.pillarhp = 100 


    def new(self): 
     self.run() 

    def run(self): 
     self.clock.tick(FPS) 
     self.playing = True 
     while self.playing: 
      self.clock.tick(FPS) 
      self.events() 
      self.update() 
      self.draw() 


    def draw(self): 
     now = pg.time.get_ticks() 
     self.screen.blit(self.bg, [0, 0]) 
     self.screen.blit(self.island, [0,0]) 
     self.all_sprites.draw(self.screen) 
     self.draw_text("Score: " + str(self.score), 20, BLACK, 40, 20) 
     self.draw_text("Pillar HP: " + str(self.pillarhp), 20, BLACK, 40, 50) 
     pg.display.flip() 
+1

コードを表示してください([最小限で完全で検証可能な例](https://stackoverflow.com/help/mcve))。 – skrx

+0

バックグラウンドサーフェスの['convert'](https://www.pygame.org/docs/ref/surface.html#pygame.Surface.convert)メソッドを呼び出します。 'self.bg = pg.image.load(" background.jpg ")。convert()'。おそらくパフォーマンスが向上します。背景イメージの大きさはどれくらいですか? – skrx

+0

.convert()を追加しましたが、エラーが発生しました: self.bg = pg.image.load( "background.jpg")convert() pygame.error:ビデオモードが設定されていません イメージ28.0 KBと1280x700 –

答えて

1

は、バックグラウンド表面のconvertメソッドを呼び出し、例えば

self.bg = pg.image.load("background.jpg").convert() 

これにより、パフォーマンスが向上します。

ピクセル単位の透過性を持つ画像の場合は、convert_alphaメソッドを使用できますが、convertメソッドで変換した画像は、はるかに高速化されます。

関連する問題