我修改了原始的硬编码程序,但是我应该备份它,因为它在使程序变量可变之前就可以正常工作了。在这种情况下,图像来自一个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个像素,而不是从左至右绘制整个子画面。
答案 0 :(得分:0)
您要从子画面表中获得“平铺”的大小,其中子画面位于一行中,图像的大小为(self.imageHeight
,self.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)