user6147492
user6147492

Reputation:

Failing to blit image to screen

I am attempting to use pygame to draw a map to a screen, but cannot understand why it won't. I'm not getting a traceback. The screen is initializing, then the image is not being drawn. I've attempted with other .bmp images with the same result, so there must be something in my code that is not ordered/written correctly.

Here is the main module of the game:

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()

Here is the board module that you see being used. Specifically, the blit_board() function, which is silently failing to draw the map.bmp file I ask it to (file is in the same directory).

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()

All I get is a black screen. Why will the map.bmp image not draw?

Upvotes: 0

Views: 659

Answers (1)

user5986440
user5986440

Reputation:

As Dan Mašek stated you need to tell PyGame to update the display after drawing the image.

To achieve this simply modify your 'board' loop to the following:

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()

Upvotes: 1

Related Questions