web-dev-qa-db-ja.com

pygameに背景画像を追加するには?

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

背景の場合、私は常に画像をゲームウィンドウのサイズ以下にして、すべての画像が表示される前に、その画像を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.

お役に立てれば。

8
HKVariant

この問題は簡単に解決できます。あなたはあなたの背景のためにあなたのスクリーンのサイズの画像を必要とするでしょう。ゲームとその能力を開始できるように、ゲームの最初に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ループには次の2行が必要です。

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

abの座標を選択します。その後、次のように画面に画像をブリットできますが、バックグラウンドブリットステートメントの後で:

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

これがお役に立てば幸いです。

8
Anthony Pham

最初に、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
Malik Brahimi