Pygame Spritesheet图像不堆叠

时间:2019-07-18 02:05:52

标签: python image pygame drawing

我修改了原始的硬编码程序,但是我应该备份它,因为它在使程序变量可变之前就可以正常工作了。在这种情况下,图像来自一个20x20px的单元格文件,总共18个单元格。

图像会像我想要的那样到达屏幕的中央,但是我的for循环没有堆叠图像。

我一直在查看最初观看的YouTube视频,并一遍又一遍地检查我的代码。我能得到的最好的结果是整个精灵表都在绘制和堆叠,而不是单个图像。

#def __init__(self) fields
#self.windowWidth = 800
#self.windowHeight = 600
#self.imageScale = 2
#self.imageSpacing = 2

    def drawImage(self):
        imageCells = []

        # number of cells determines loop length
        for i in range(self.imageWidth // self.imageHeight):
            rectangle = pygame.Rect(self.imageWidth * self.imageScale * i, 0, self.imageWidth * self.imageScale, self.imageHeight * self.imageScale)
            processedImage = pygame.Surface(rectangle.size)

            # draw image
            self.window.blit(self.userImage, (self.windowWidth // 2, self.windowHeight // 2 - (self.imageSpacing * i)), rectangle)

            # keep alpha
            alpha = processedImage.get_at((0, 0))
            processedImage.set_colorkey(alpha)
            imageCells.append(processedImage)

            # update window
            pygame.display.flip()

我希望i的每个增量都在下一个单元格的上方绘制2个像素,而不是从左至右绘制整个子画面。

1 个答案:

答案 0 :(得分:0)

您要从子画面表中获得“平铺”的大小,其中子画面位于一行中,图像的大小为(self.imageHeightself.imageHeight),并且开始于磁贴为self.imageHeight * i

h = self.imageHeight
rectangle = pygame.Rect(h * i, 0, h, h)    

将图块复制到processedImage,然后使用pygame.transform.smoothscale()缩放(平铺)图像。例如:

h = self.imageHeight
for i in range(self.imageWidth // self.imageHeight):

    rectangle = pygame.Rect(h * i, 0, h, h)   

    processedImage = pygame.Surface(rectangle.size)
    processedImage.blit(self.userImage, (0, 0), rectangle)
    processedImage.set_colorkey([0, 0, 0])
    new_size = (h * self.imageScale, h * self.imageScale)
    processedImage = pygame.transform.smoothscale(processedImage, new_size)

    pos = (self.windowWidth // 2, self.windowHeight // 2 - (self.imageSpacing * i))
    self.window.blit(processedImage, pos)