2

我从一个 youtbe 视频中对此进行了编码,他似乎做得很好,但是当我尝试时,我在底部收到错误消息,我很困惑,我需要帮助。

#!/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 

我不确定这意味着什么或如何解决

这是修复

你有两个问题。你的第一个是你把引号放在周围 back.png,使它变成一个字符串(str)而不是一个表面 (pygame.Surface)。您的第二个是您为第二个参数而不是 rect 放置一个元组(pygame.Rect).要修复第一个,只需放置 backgroundfile (您之前将表面保存为)而不是 "background.png". 要修复第二个,请使用backgroudfile.get_rect()获取背景的矩形。你的行应该是:

screen.blit(backgroundfile, backgroundfile.get_rect()这本身不起作用,因为您之前没有将背景文件保存为表面对象。代替

backgroundfile = "back.png"

backgroundfile = pygame.image.load("back.png")"back.png"如果保存为同一文件夹中的文件,这将返回一个表面。对另一个加载的图像执行相同的操作。做所有这些事情,你的程序应该可以工作。

4

1 回答 1

4

你有两个问题。你的第一个是你把引号括起来back.png,使它成为一个字符串(str)而不是一个表面(pygame.Surface)。你的第二个是你为第二个参数放置一个元组而不是一个矩形(pygame.Rect)。要解决第一个问题,只需输入backgroundfile(您之前将表面保存为的内容)而不是"background.png". 要修复第二个,请使用backgroudfile.get_rect()获取背景的矩形。你的行应该是:

screen.blit(backgroundfile, backgroundfile.get_rect()

这本身不起作用,因为您之前没有将背景文件保存为表面对象。代替

backgroundfile = "back.png"

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

如果“back.png”作为文件保存在同一文件夹中,这将返回一个表面。对另一个加载的图像执行相同的操作。做所有这些事情,你的程序应该可以工作。

于 2012-12-29T23:30:05.140 回答