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
ループには次の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])
a
とb
の座標を選択します。その後、次のように画面に画像をブリットできますが、バックグラウンドブリットステートメントの後で:
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()