当尝试对存储在元组中的图像进行blit时,出现以下错误:
Traceback (most recent call last):
File "/home/lyut/Projects/FruitMachine/test.py", line 40, in <module>
if __name__ == '__main__': main()
File "/home/lyut/Projects/FruitMachine/test.py", line 34, in main
draw_initial_gems()
File "/home/lyut/Projects/FruitMachine/test.py", line 11, in draw_initial_gems
pygame.Surface.blit(gems[0], (212, 100))
TypeError: argument 1 must be pygame.Surface, not tuple
我到处寻找类似的问题,但没有找到与此问题完全相同的任何东西。
这是我用来重现该错误的源代码:
import pygame
gems = [
pygame.image.load("graphics/Gems/1.png"),
pygame.image.load("graphics/Gems/2.png"),
pygame.image.load("graphics/Gems/3.png"),
]
def draw_initial_gems():
pygame.Surface.blit(gems[0], (212, 100))
pygame.Surface.blit(gems[1], (340, 100))
pygame.Surface.blit(gems[2], (468, 100))
def main():
pygame.init()
clock = pygame.time.Clock()
print type(gems[1]) # returns: <type 'pygame.Surface'>
size = [800, 600]
screen = pygame.display.set_mode(size)
pygame.display.set_caption("test")
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
return
screen.fill((255, 255, 255))
draw_initial_gems()
pygame.time.tick(30)
pygame.quit()
if __name__ == '__main__': main()
所以我的问题是:如何对存储在元组中的图像进行混合处理?
最佳答案
那不是您使用方法的方式。您应该写:
gems[0].blit(screen, (x, y))
当您将该方法用作函数时,Pygame似乎变得非常困惑。 (通常,您必须首先将方法涉及的实例作为第一个参数。)
为什么需要屏幕?因为blit是块图像传输。它从一个图像转到另一个图像。