如何在pygame中添加背景图片?

问题描述 投票:0回答:4

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()
python background pygame
4个回答
30
投票

对于背景,我总是制作一个与游戏窗口大小相同或更小的图像,然后在显示所有图像之前,我将该图像传输到 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.

希望这有帮助。


14
投票

这个问题很容易解决。您需要一张屏幕大小的图像作为背景。请记住在游戏开头添加

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

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

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

您还需要在

while
循环中添加这两行:

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

这会将您的屏幕填满白色,并将背景图像放在其上方,但位于其他精灵和对象下方。
建议: 您应该为其他精灵创建另一个类(也许是图像未出现的原因)。一个例子可能是这样的:

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

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

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

选择

a
b
的坐标。然后,您可以像这样将图像传输到屏幕上,但在背景 blit 语句之后:

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

希望对您有帮助!


1
投票

首先,这一切都不起作用,因为你在导入 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()

0
投票

这段代码应该可以完美运行,但我无法尝试它,因为我没有你的图像资源。前提是您在导入 pygame 的位置下方添加

pygame.init()

© www.soinside.com 2019 - 2024. All rights reserved.