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()
对于背景,我总是制作一个与游戏窗口大小相同或更小的图像,然后在显示所有图像之前,我将该图像传输到 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.
希望这有帮助。
这个问题很容易解决。您需要一张屏幕大小的图像作为背景。请记住在游戏开头添加
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)
希望对您有帮助!
首先,这一切都不起作用,因为你在导入 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()
这段代码应该可以完美运行,但我无法尝试它,因为我没有你的图像资源。前提是您在导入 pygame 的位置下方添加
pygame.init()
。