我有一个自己用PIL制作的图片是这样的
我想在pygame里通过读取这个图片,作为很多个帧,让足球转起来
已知每个足球都是350350像素的大小,一共12个足球,所以这个图片是35012=4200,即宽4200高350
然后我想写一个通用的方法,凡是这种单行的,且由w和h相等的n个图片拼起来,想让把它们变成n个帧,且每个帧要缩放到pic_w宽,pic_h高
以下是代码
def get_dh_frames(images, w, h, n, pic_w, pic_h, colorkey=None):
"""单行的图片,将n个等宽w,等高h的图片,抽出n个帧,每帧缩放到pic_w,pic_h"""
frames = []
surface = pygame.Surface((w, h)) # 建造一个需要的大小的表面
for i in range(n):
surface.blit(images, (0, 0), (i * w, 0, w, h)) # 将大图片中的(i*w , 0,w,h)位置的图片粘贴到surface的(0,0)位置
if colorkey:
surface.set_colorkey(colorkey)
surface = pygame.transform.scale(surface, (pic_w, pic_h)).convert_alpha() # 将w,h大小的帧,缩放到pic_w,pic_h大小
frames.append(surface)
return frames
我的想法是,先建一个和单个图片相等的表面
再把总图片的某个部分粘到表面上,然后存起来
但是结果是,图片动不起来,我估计是因只读到了1个图片
怀疑是这句的问题
surface.blit(images, (0, 0), (i * w, 0, w, h))
其实针对如何动起来,我已经有解决方法了:1.用12个不同的文件,就能动起来了,但这样文件太多。2.用subsurface也可以
但是我仍然来问,主要是因为,这个代码有问题,说明我可能对surface或者blit理解有问题。希望有高人解答一下,谢谢