2016-04-18 26 views
0

Ich versuche, mit Pygame eine Karte auf einen Bildschirm zu zeichnen, kann aber nicht verstehen, warum es nicht funktioniert. Ich bekomme keine Rückverfolgung. Der Bildschirm wird initialisiert und das Bild wird nicht gezeichnet. Ich habe versucht mit anderen .bmp Bildern mit dem gleichen Ergebnis, also muss es etwas in meinem Code geben, das nicht richtig geordnet/geschrieben ist.Fehler beim Bild zu Bildschirm

Hier ist das Hauptmodul des Spiels:

import pygame 
import sys 
from board import Board 

def run_game(): 

    #Launch the screen. 

    screen_size = (1200, 700) 
    screen = pygame.display.set_mode(screen_size) 
    pygame.display.set_caption('Horde') 


    #Draw the board. 
    game_board = Board(screen) 
    game_board.blit_board() 

    #Body of the game. 
    flag = True 
    while flag == True: 
     game_board.update_board() 

run_game() 

Hier ist das Board-Modul, mit dem Sie sehen werden. Genauer gesagt, die blit_board() Funktion, die im Stillen fehlschlägt, die map.bmp Datei zu zeichnen, frage ich es (Datei ist im selben Verzeichnis).

import pygame 
import sys 

class Board(): 

    def __init__(self, screen): 
     """Initialize the board and set its starting position""" 
     self.screen = screen 

     #Load the board image and get its rect. 
     self.image = pygame.image.load('coll.bmp') 
     self.rect = self.image.get_rect() 
     self.screen_rect = screen.get_rect() 

     #Start the board image at the center of the screen. 
     self.rect.centerx = self.screen_rect.centerx 
     self.rect.centery = self.screen_rect.centery 

    def blit_board(self): 
     """Draw the board on the screen.""" 
     self.screen.blit(self.image, self.rect) 



    def update_board(self): 
     """Updates the map, however and whenever needed.""" 

     #Listens for the user to click the 'x' to exit. 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: sys.exit() 

     #Re-draws the map. 
     self.blit_board() 

Alles, was ich bekomme, ist ein schwarzer Bildschirm. Warum wird das map.bmp Bild nicht zeichnen?

+0

Sie nicht ein [ 'pygame.display.flip()'] (http tun müssen: // www. pygame.org/docs/ref/display.html#pygame.display.flip) oder ['pygame.display.update()'] (http://www.pygame.org/docs/ref/display.html#pygame .display.update) nach dem Blit, um den Bildschirm tatsächlich zu aktualisieren? –

+0

Rechts. Und alles läuft auf eine Aussage hinaus. Das war genau das! Vielen Dank. –

Antwort

1

Wie Dan Mašek sagte, müssen Sie PyGame anweisen, die Anzeige nach dem Zeichnen des Bildes zu aktualisieren.

Um dies zu erreichen einfach Ihre 'Board' Schleife der folgenden ändern:

def update_board(self): 
    """Updates the map, however and whenever needed.""" 

    #Listens for the user to click the 'x' to exit. 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: sys.exit() 

    #Re-draws the map. 
    self.blit_board() 

    pygame.display.update() 
+1

Das war genau das, was ich tun musste. pygame.display.update(). Habe das vergessen. Danke für Ihre Hilfe! –

Verwandte Themen