2017-12-17 2 views
1

Ich mache einen Platformer und ich habe ein Problem beim Blitting des Hintergrunds. In meinem aktuellen Code zeichnet die Spielschleife jeden Frame den Hintergrund des Spielfensters, was das Spiel wirklich lahm macht, wenn ich einen Hintergrund verwenden möchte, der nicht nur eine Volltonfarbe ist. Meine Frage ist, wie ich den Hintergrund nur einmal (wenn es möglich ist) blit, so dass das Spiel nicht so sehr verlangsamen würde.Wie blit ich einen Hintergrund nur einmal in Pygame?

Hier sind einige Teile meines Spiels Klasse, die zu Blitten das Bild führen:

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

Bitte zeigen Sie uns Ihren Code (ein [minimales, vollständiges und überprüfbares Beispiel] (https://stackoverflow.com/help/mcve)). – skrx

+0

Rufen Sie die Methode [convert'] (https://www.pygame.org/docs/ref/surface.html#pygame.Surface.convert) der Hintergrundoberfläche auf, z. 'self.bg = pg.image.load (" background.jpg "). convert()'. Das wird wahrscheinlich die Leistung verbessern. Wie groß ist das Hintergrundbild? – skrx

+0

Ich habe .convert() hinzugefügt, aber es gab mir einen Fehler: self.bg = pg.image.load ("background.jpg"). Convert() pygame.error: Kein Videomodus wurde eingestellt Das Bild ist 28.0 KB und 1280x700 –

Antwort

1

Rufen Sie die convert Verfahren der Hintergrundoberfläche, z.B.

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

Das wird die Leistung verbessern.

Für Bilder mit Transparenz pro Pixel können Sie die Methode convert_alpha verwenden, aber Bilder, die Sie mit der convert-Methode konvertieren, werden viel schneller angezeigt.

Verwandte Themen