当前位置: 首页 > 知识库问答 >
问题:

参数1必须是pyplay。表面,而不是str我如何修复?[关闭]

高钱青
2023-03-14

我从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)而不是一个表面(pyplay.表面).你的第二个是,你把一个元组的第二个参数,而不是rect(pyplay.要修复第一个问题,只需将背景文件(您以前将表面保存为)而不是background.png。要解决第二个问题,请使用backgroudfile.get_rect()获取背景的rect。你的行应该是:

screen.blit(backgroundfile,backgroundfile.get_rect()由于您以前没有将backgroundfile保存为曲面对象,因此此操作本身将不起作用。而不是

backgroundfile=“back.png”put

backgroundfile=pygame.image.load(“back.png”)如果将“back.png”保存为同一文件夹中的文件,则将返回曲面。对另一个加载的图像执行相同的操作。做了所有这些事情,你的程序就会工作。


共有1个答案

裘嘉木
2023-03-14

你有两个问题。首先,在back.png周围加上引号,使其成为字符串(str)而不是曲面(pygame.surface)。第二个是为第二个参数放置一个元组,而不是一个rect(pygame.rect)。要修复第一个问题,只需将backgroundfile(您以前将曲面保存为的内容)而不是“background.png”。要修复第二个问题,请使用backgroundfile.get_rect()获取背景的rect。您的线路应该是:

screen.blit(backgroundfile, backgroundfile.get_rect()

这本身不起作用,因为您以前没有将backgroundfile保存为曲面对象。而不是

backgroundfile = "back.png"

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

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

 类似资料:
  • 我想先说一下,我确实查过这个问题,但每个似乎有类似问题的人都找到了一个不适合我的解决方案。我正在使用Python3.4.3 64位和pygame 1.9.2a,并在标题中说明了错误。目前我的代码如下所示: 运行它给了我以下信息: 提前谢谢,如果这听起来像个愚蠢的问题,我很抱歉。 编辑:多亏了布莱恩,这个问题现在已经解决了。对于任何有类似问题的人来说,以后可能会看到这个,更正后的版本是这样的: 关键

  • 我有一个问题,我做了一个乒乓游戏,但我有一个问题,把分数打印到pyplay窗口。 我得到错误'TypeError:参数1必须是pygame.Surface,而不是str 我在文本中输入了blit,但出现了一个错误。我知道代码乱七八糟,我稍后会修复它

  • 我正在编写一个小型python游戏,我的一些代码似乎不起作用。看一看: 是啊......所以错误是:

  • 你好,我正在创建一个游戏使用pyplay和我有一些问题。我创建了一些按钮(使用图像),并根据某些操作,此按钮的图像将发生变化。我将向您展示代码中存在错误的部分。抱歉,我是西班牙人,我的英语不好。这是代码: 那么错误就是那个: 例如,在代码的最后一行: 如果我把默认,图像是那些所谓的default_ap和default_ip,那些: 如果我把丘巴卡,图像将被称为chewbacca_ap和chewba

  • 我无法理解Stackoverflow中的其他问题。当圆圈向屏幕末端移动时,它会向相反方向移动。 发出错误消息而未执行。 screen.blit(圆圈,[x,y]) 类型错误:参数1必须是pygame.Surface,而不是pygame.Rect 有什么问题吗?