如何将背景图像添加到pygame?

时间:2023-01-24 16:16:18

new to pygame just wondering how i would go about adding a background image into the game itself? this is my code so far, i've been using the bg as a way to import my image but the py file itself refuses to load up.

pygame的新手只是想知道如何在游戏中添加背景图片?这是我的代码到目前为止,我一直使用bg作为导入我的图像的方式,但py文件本身拒绝加载。

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

3 个解决方案

#1


7  

This problem can be easily solved. You will need an image the size of your screen for your background. Please remember to add pygame.init() at the beginning of your game to be able to start it and its abilities. A function for this picture can be used like this:

这个问题很容易解决。您需要一个与屏幕大小相符的图像作为背景。请记住在游戏开始时添加pygame.init()以便能够启动它和它的能力。这张图片的功能可以像这样使用:

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

This will allow the program to load your image through this function when you call it like this:

这将允许程序在您调用它时通过此函数加载图像:

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

And you will also need these two lines in your while loop:

而且你的while循环中还需要这两行:

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

This will fill your screen white and put the background image over it but under your other sprites and objects.
Suggestions: You should make another class for your other sprite (maybe the reason why the image is not appearing). An example could be like:

这将使您的屏幕填满白色,并将背景图像放在它上面,但在其他精灵和物体下面。建议:你应该为你的另一个精灵创建另一个类(可能是图像没有出现的原因)。一个例子可能是:

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

You could then "activate" it like this:

然后你可以像这样“激活”它:

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

Select the coordinates for a and b. You can then blit the image on to the screen like this but after your background blit statement:

选择a和b的坐标。然后你可以像这样将图像blit到屏幕上,但是在你的背景blit声明之后:

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

I hope this helps you!

我希望这可以帮助你!

#2


5  

For background I always make an image the size of my game window or smaller then before all of the images are displayed, I blit that image to 0,0.

对于背景,我总是将图像设置为我的游戏窗口的大小或更小,然后在显示所有图像之前,我将该图像blit为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.

Hope this helps.

希望这可以帮助。

#3


1  

First of all, none of this will work because you did not initialize Pygame after importing it. Also, the pictures won't be loaded because the backslash indicates an escape seqeunce. Lastly, you should fix your indentation.

首先,这些都不会起作用,因为你在导入后没有初始化Pygame。此外,图片将不会加载,因为反斜杠表示逃脱序列。最后,你应该修复你的缩进。

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

#1


7  

This problem can be easily solved. You will need an image the size of your screen for your background. Please remember to add pygame.init() at the beginning of your game to be able to start it and its abilities. A function for this picture can be used like this:

这个问题很容易解决。您需要一个与屏幕大小相符的图像作为背景。请记住在游戏开始时添加pygame.init()以便能够启动它和它的能力。这张图片的功能可以像这样使用:

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

This will allow the program to load your image through this function when you call it like this:

这将允许程序在您调用它时通过此函数加载图像:

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

And you will also need these two lines in your while loop:

而且你的while循环中还需要这两行:

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

This will fill your screen white and put the background image over it but under your other sprites and objects.
Suggestions: You should make another class for your other sprite (maybe the reason why the image is not appearing). An example could be like:

这将使您的屏幕填满白色,并将背景图像放在它上面,但在其他精灵和物体下面。建议:你应该为你的另一个精灵创建另一个类(可能是图像没有出现的原因)。一个例子可能是:

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

You could then "activate" it like this:

然后你可以像这样“激活”它:

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

Select the coordinates for a and b. You can then blit the image on to the screen like this but after your background blit statement:

选择a和b的坐标。然后你可以像这样将图像blit到屏幕上,但是在你的背景blit声明之后:

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

I hope this helps you!

我希望这可以帮助你!

#2


5  

For background I always make an image the size of my game window or smaller then before all of the images are displayed, I blit that image to 0,0.

对于背景,我总是将图像设置为我的游戏窗口的大小或更小,然后在显示所有图像之前,我将该图像blit为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.

Hope this helps.

希望这可以帮助。

#3


1  

First of all, none of this will work because you did not initialize Pygame after importing it. Also, the pictures won't be loaded because the backslash indicates an escape seqeunce. Lastly, you should fix your indentation.

首先,这些都不会起作用,因为你在导入后没有初始化Pygame。此外,图片将不会加载,因为反斜杠表示逃脱序列。最后,你应该修复你的缩进。

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