¿Cómo agregar una imagen de fondo en pygame?

¿Eres nuevo en pygame y me pregunto cómo me gustaría agregar una imagen de fondo en el juego? este es mi código hasta ahora, he estado usando el bg como una forma de importar mi imagen pero el propio archivo py se niega a cargar.

import pygame import sys from pygame.locals import * clock = pygame.time.Clock() screen = pygame.display.set_mode((600,500)) bg = pygame.image.load("images\space.png") pygame.mouse.set_visible(0) ship = pygame.image.load("images\ship.png") ship_top = screen.get_height() - ship.get_height() ship_left = screen.get_width()/2 - ship.get_width()/2 screen.blit(ship, (ship_left,ship_top)) shot = pygame.image.load("images\shot.png") shoot_y = 0 pygame.display.set_caption('galaxy invaders') while True: clock.tick(60) screen.fill((r,0,0)) screen.blit(bg.(0,0)) x,y = pygame.mouse.get_pos() screen.blit(ship, (x-ship.get_width()/2, ship_top)) for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == MOUSEBUTTONDOWN: shoot_y = 500 shoot_x = x if shoot_y > 0: screen.blit(shot, (shoot_x, shoot_y)) shoot_y -= 10 pygame.display.update() 

Este problema se puede resolver fácilmente. Necesitará una imagen del tamaño de su pantalla para su fondo. Recuerda agregar pygame.init() al comienzo de tu juego para poder iniciarlo y sus habilidades. Una función para esta imagen se puede usar así:

 class Background(pygame.sprite.Sprite): def __init__(self, image_file, location): pygame.sprite.Sprite.__init__(self) #call Sprite initializer self.image = pygame.image.load(image_file) self.rect = self.image.get_rect() self.rect.left, self.rect.top = location 

Esto permitirá que el progtwig cargue su imagen a través de esta función cuando lo llame así:

 BackGround = Background('background_image.png', [0,0]) 

Y también necesitarás estas dos líneas en tu bucle while:

 screen.fill([255, 255, 255]) screen.blit(BackGround.image, BackGround.rect) 

Esto llenará la pantalla en blanco y pondrá la imagen de fondo sobre ella, pero debajo de tus otros sprites y objetos.
Sugerencias: deberías hacer otra clase para tu otro sprite (tal vez la razón por la cual la imagen no aparece). Un ejemplo podría ser como:

 class Ship(pygame.sprite.Sprite): def __init__(self, image_file, speed, location): pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load(image_file) self.rect = self.image.get_rect() self.rect.left, self.rect.top = location 

Entonces podrías “activarlo” así:

 ship = Ship("images\ship.png", [a, b]) 

Seleccione las coordenadas para a y b . Luego puede borrar la imagen en la pantalla de esta manera, pero después de su statement de fondo:

 screen.blit(ship.image, ship.rect) 

¡Espero que esto te ayude!

Para el fondo, siempre hago una imagen del tamaño de mi ventana de juego o más pequeña, antes de que se muestren todas las imágenes, la imagen se borra a 0,0.

 bg = pygame.image.load("bg.png") #INSIDE OF THE GAME LOOP gameDisplay.blit(bg, (0, 0)) #REST OF ITEMS ARE BLIT'D TO SCREEN. 

Espero que esto ayude.

En primer lugar, nada de esto funcionará porque no inicializó Pygame después de importarlo. Además, las imágenes no se cargarán porque la barra invertida indica una secuencia de escape. Por último, deberías arreglar tu sangría.

 import pygame import sys from pygame.locals import * pygame.init() # initialize pygame clock = pygame.time.Clock() screen = pygame.display.set_mode((600,500)) # os.path.join properly forms a cross-platform relative path # by joining directory names bg = pygame.image.load(os.path.join("images", "space.png")) pygame.mouse.set_visible(0) ship = pygame.image.load(os.path.join("images", "ship.png")) ship_top = screen.get_height() - ship.get_height() ship_left = screen.get_width()/2 - ship.get_width()/2 screen.blit(ship, (ship_left,ship_top)) shot = pygame.image.load(os.path.join("images", "space.png")) shoot_y = 0 pygame.display.set_caption('galaxy invaders') # fix indentation while True: clock.tick(60) screen.blit(bg, (0,0)) x,y = pygame.mouse.get_pos() screen.blit(ship, (x-ship.get_width()/2, ship_top)) for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == MOUSEBUTTONDOWN: shoot_y = 500 shoot_x = x if shoot_y > 0: screen.blit(shot, (shoot_x, shoot_y)) shoot_y -= 10 pygame.display.update()