一、介绍与演示
帧动画就是不断轮播一组图片,利用残影,让我们看起来它在动。
在 image 中将原本的路径字段,改成带有格式化功能的路径,实际传入的参数,替换成这样,加入一个路径编代表目前播放到第几张图片。
二、代码详解
在image.py中增加以下操作可以实现帧动画的操作
def updateImage(self):
# 更新图片路径
path=self.pathFmt
if self.pathIndexMax!=0:
path = path % self.pathIndex
self.image = pygame.image.load(path).convert_alpha()
#如果有传入size参数,则缩放图片
if self.size:
self.image = pygame.transform.scale(self.image, self.size)
#更新pathIndex
def updateIndex(self,pathIndex):
self.pathIndex = pathIndex
self.updateImage()
def updateSize(self,size):
# 更改图片大小后也要重新更新图片
self.size = size
self.updateImage()
完整代码:
#图像的类
import pygame # 导入Pygame库
# 定义一个继承自Pygame精灵基类的Image类
class Image(pygame.sprite.Sprite):
def __init__(self, pathFmt,pathIndex,pos,size, pathIndexMax=0):
#pos传入的是一个Tuple元组,不可修改需要转换成list列表
#pathFmt传入的是图片路径,pathIndex是图片的索引
#pathIndexMax是图片的最大索引
super().__init__() # 调用父类Sprite的初始化方法
self.pathFmt = pathFmt # 保存图片路径
self.pathIndex = pathIndex
self.pathIndexMax = pathIndexMax
self.size = size # 保存图片大小
self.pos = list(pos) # 保存图片位置
self.updateImage() # 调用更新图片的方法
def updateSize(self,size):
# 更新图片大小
self.size = size
self.updateImage() # 调用更新图片的方法
def getRect(self):
rect = self.image.get_rect() # 获取图片的矩形区域
rect.x,rect.y = self.pos # 设置矩形区域的位置
return rect
def updateImage(self):
# 更新图片路径
path=self.pathFmt
if self.pathIndexMax!=0:
path = path % self.pathIndex
self.image = pygame.image.load(path).convert_alpha()
#如果有传入size参数,则缩放图片
if self.size:
self.image = pygame.transform.scale(self.image, self.size)
#更新pathIndex
def updateIndex(self,pathIndex):
self.pathIndex = pathIndex
self.updateImage()
def doLeft(self):
# 向左移动图片
self.pos[0] -= 0.1
def draw(self, ds):
# 将图片绘制到目标Surface(ds)上,使用rect的坐标
ds.blit(self.image, self.getRect()) #不可直接使用pos会破坏sprite类的rect属性,导致无法进行碰撞检测等问题
main.py修改部分
Tips:
在此段代码中的%并非是取余,而是将 self.pathIndex
的值插入到 path
字符串的占位符(此代码占位符是%d)中,生成新的路径字符串。