2015-01-14 132 views
2

我目前在教我自己的游戏编程,我已经开始使用pygame很好,很容易。我经历了一个教程,告诉我如何构建一个简单的游戏,现在我已经完成了它,我正在尝试以对我有意义的方式重新组织代码,并且编辑它并且添加到它。TypeError:无法连接'str'和'pygame.Surface'对象

我试图改变的一部分是,我没有为一个字符加载一个'.png'文件,而是加载了一个将在我设计的'move()'函数中迭代的列表。角色看起来像是在移动。然而,我不断遇到一个错误,我不知道为什么。近我的代码开始(所有我所做的是进口必要的模块和初始化pygame的和一些必要的变量)我试着做下面的代码:

badguyimgs = ['badguy.png', 'badguy2.png', 'badguy3.png', 'badguy4.png'] 
for img in badguyimgs: 
    badguyimgs.append(pygame.image.load("resources/images/" + img)) 
    badguyimgs.remove(img) 

我不断收到以下错误:

TypeError: cannot concatenate 'str' and 'pygame.Surface' objects 

到目前为止,我试图初始化一个新变量(resource =“resources/images /”+ img),并将其放在“for”循环的开头,然后将其插入到pygame.image.load() 。我也尝试使用os.path.join(“resource/images /”+ img)。我试过使用完整路径名称(“c:\\ Users \\。\\ resources \\ images \\”+ img)。但是,任何时候我尝试连接路径名与列表中的文件名,我得到上面的错误代码。我试图寻找pygame文档,但没有看到任何有助于这种情况的东西。我试着用google搜索这个错误,但没有提到这个。 (尽管人们将int类型连接成字符串的问题很多,但我希望任何人都能帮助指出我为什么遇到这种情况,以及可以解决的问题。谢谢。

回答

2

看起来你正在做的是在迭代pygame.surface对象(从png文件加载的时候)到列表中。您正在成功加载图像。但是之后你的函数将第一个图像,并删除该字符串,列表如下:

badguyimgs = ['badguy2.png', 'badguy3.png', 'badguy4.png', pygame.image] 

你仍然可以通过列表迭代,所以你的函数开始试图将字符串和pygame.surface对象。我会建议创建一个空列表,并将您加载的图像添加到该列表中,而无需添加或删除原始内容。希望这有助于!

+0

谢谢!我不能相信我错过了一点简单的逻辑。 – BlackBox

2

下面是一个例子去与PlatypusVenom的解释:

file_names = ['badguy.png', 'badguy2.png', 'badguy3.png', 'badguy4.png'] 
images = [] 
for file_name in file_names: 
    images.append(pygame.image.load("resources/images/" + file_name)) 

现在pygame.Surface对象在images,并为列表中的变量名是减少混乱。另一种选择是使用list comprehension

images = [pygame.image.load("resources/images/" + file_name) for file_name in \ 
      ("badguy.png", "badguy2.png", "badguy3.png", "badguy4.png")] 

这类似于你要什么在发布的代码。字符串列表将从内存中删除,只在images列表中保留pygame.Surface对象。

相关问题