【植物大战僵尸】帧动画

一、介绍与演示

帧动画就是不断轮播一组图片,利用残影,让我们看起来它在动。
在 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)中,生成新的路径字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值