pygame 飞机大战动态画面的实现方式(一)

目标:实现飞机的动态,爆炸效果的动态

普通方式的实现,图片的动态效果一般有两种

一种是多张图片,文件名最后一个字为有序的数字,连在一起就产生动画效果。

一种是一张图片,里面切割成多行,多列,这些分隔连着一起产生动画。

无论哪种图片,都是装入一个list,设置间隔,循环播放。

import pygame


class Bomb(object):
    # 初始化爆炸
    def __init__(self, scene):
        self.main_scene = scene
        # 加载爆炸资源,两种方法。
        # 方法一 加载单张图片的列表
        # self.images = [pygame.image.load("images/bomb/bomb" + str(v) + ".png") for v in range(1, 3)]
        # 方法二 单张图片切片
       # 爆炸特效的帧列表
        self.images = []
        self.boom_picture = pygame.image.load(
            "./images/bomb/bomb.png").convert_alpha()
        #四行、八列,单个 82x82像素
        for r in range(4):
            for c in range(8):
                frame = self.boom_picture.subsurface(
                    [c * 82 , r * 82, 82 ,82])
                self.images.append(frame)
        # 设置当前爆炸播放索引
        self.index = 0
        # 图片爆炸播放间隔
        self.interval = 2
        self.interval_index = 0
        # 爆炸位置
        self.position = [0, 0]
        # 是否可见
        self.visible = False

    # 设置爆炸播放的位置
    def set_pos(self, x, y):
        self.position[0] = x - 25
        self.position[1] = y

    # 爆炸播放
    def action(self):
        # 如果爆炸对象状态不可见,则不计算坐标
        if not self.visible:
            return

        # 控制每一帧图片的播放间隔
        self.interval_index += 1
        if self.interval_index < self.interval:
            return
        self.interval_index = 0

        self.index = self.index + 1
        if self.index >= len(self.images):
            self.index = 0
            self.visible = False

    # 绘制爆炸
    def draw(self):
        # 如果对象不可见,则不绘制
        if not self.visible:
            return
        self.main_scene.scene.blit(
            self.images[self.index], (self.position[0], self.position[1]))

猜你喜欢

转载自blog.csdn.net/hailler1119/article/details/88649924