2

私はこれをYouTubeビデオからコーディングしました.彼はそれをうまくやっているように見えました.

#!/usr/bin/env python

import pygame, sys

from pygame.locals import *

pygame.init()

screen = pygame.display.set_mode((370, 572), 0, 32)

backgroundfile = "back.png"
mousefile = "mouse.png"

back = pygame.image.load(backgroundfile).convert()
mouse = pygame.image.load(mousefile).convert_alpha()

while True:

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

    #Now we have initialized everything lets start with the main part

    screen.blit("back.png", (0,0))

    pygame.display.flip()

プログラムを実行すると、次のエラーが表示されます。

Traceback (most recent call last):
  File "Tutorial 5 First game.py", line 26, in <module>
  screen.blit("back.png", (0,0))
TypeError: argument 1 must be pygame.Surface, not str 

これが何を意味するのか、どのように修正するのかわかりません

これが修正でした

2 つの問題があります。1 つ目は、引用符で囲み 、表面ではなく back.png文字列にすることです。2 つ目は、rect の代わりに 2 番目の引数にタプルを配置することです。最初の引数を修正するには、 . 2 番目を修正するには、 を使用して背景の rect を取得します。あなたの行は次のようになります。(str)(pygame.Surface)(pygame.Rect)."background.png"backgroudfile.get_rect()

screen.blit(backgroundfile, backgroundfile.get_rect()前に backgroundfile をサーフェス オブジェクトとして保存していないため、これだけでは機能しません。それ以外の

backgroundfile = "back.png"置く

backgroundfile = pygame.image.load("back.png")"back.png"が同じフォルダにファイルとして保存されている場合、これはサーフェスを返します。もう一方のロードされたイメージで同じことを行います。これらすべてを実行すると、プログラムが機能するはずです。

4

1 に答える 1

4

2 つの問題があります。1 つ目は、 を引用符でback.png囲み、サーフェス (pygame.Surface) ではなく文字列 (str) にすることです。2 つ目は、rect (pygame.Rect) の代わりに 2 番目の引数にタプルを配置することです。最初のものを修正するには、単純にbackgroundfile(以前にサーフェスを保存したもの) を の代わりに置きます"background.png"。2 番目を修正するには、 を使用backgroudfile.get_rect()して背景の rect を取得します。あなたの行は次のようになります。

screen.blit(backgroundfile, backgroundfile.get_rect()

前に backgroundfile をサーフェス オブジェクトとして保存していないため、これだけでは機能しません。それ以外の

backgroundfile = "back.png"

置く

backgroundfile = pygame.image.load("back.png")

「back.png」が同じフォルダーにファイルとして保存されている場合、これはサーフェスを返します。もう一方のロードされたイメージで同じことを行います。これらすべてを実行すると、プログラムが機能するはずです。

于 2012-12-29T23:30:05.140 に答える