我用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)
。你的第二个是你为第二个放了一个元组 参数而不是矩形(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"
保存为同一文件夹中的文件。做吧 与其他加载图像相同的事情。做所有这些事情和你的 程序应该有效。
答案 0 :(得分:1)
你有两个问题。首先是你在back.png
周围加上引号,使它成为一个字符串(str)而不是一个表面(pygame.Surface)。你的第二个是你为第二个参数而不是rect(pygame.Rect)放置一个元组。要解决第一个问题,只需将backgroundfile
(之前保存表面的内容)放在"background.png"
上即可。要解决第二个问题,请使用backgroudfile.get_rect()
来获取背景的矩形。你的行应该是:
screen.blit(backgroundfile, backgroundfile.get_rect()
这本身不起作用,因为您之前没有将backgroundfile保存为表面对象。而不是
backgroundfile = "back.png"
把
backgroundfile = pygame.image.load("back.png")
如果将“back.png”保存为同一文件夹中的文件,则会返回一个曲面。对其他加载的图像执行相同的操作。做所有这些事情和你的程序应该有效。