コード例 #1
0
ファイル: animation.py プロジェクト: SundaySSSSS/MachineBreak
class Animation:
    def __init__(self, frameList):
        self.frameList = frameList  # 设置帧列表, frameList为一个list, 每一个成员均为surface
        self.maxFrame = len(self.frameList)  # 动画帧数量
        self.currentFrameIdx = 0  # 当前动画帧id
        self.frameDurationMsec = 0  # 播放动画时使用的帧间隔
        self.pos = [0, 0]  # 动画发生地点, 单位为像素
        self.surface = None  # 动画发生的surface
        self.repeat = 0  # 循环次数 0-无限循环
        self.state = ANIME_READY  # 动画就绪
        self.alarm = Alarm()
        self.playTimes = 0  # 动画被播放的次数

    def setFrameDuration(self, duration_msec):
        self.frameDurationMsec = duration_msec

    def setPostion(self, surface, pos):
        # 设置动画发生的地点
        self.pos = pos
        self.surface = surface

    def setRepeat(self, repeat):
        # 设置循环模式, 0-无限循环, >0-循环几次
        self.repeat = repeat

    def draw(self):
        # 周期性的调用此函数即可进行动画描画
        if self.state == ANIME_READY:
            self.state = ANIME_RUNNING
            self.alarm.setTimeout(self.frameDurationMsec)
            self.alarm.start()
        elif self.state == ANIME_RUNNING:
            if self.alarm.isTimeout():
                self.currentFrameIdx += 1
                if self.currentFrameIdx == self.maxFrame:
                    self.currentFrameIdx = 0
                    if self.repeat != 0:
                        # 不是无限循环
                        self.playTimes += 1
                        if self.playTimes == self.repeat:
                            # 到达播放次数
                            self.state = ANIME_FINISHED
            self.surface.blit(self.frameList[self.currentFrameIdx], self.pos)
        else:
            pass  # 不做任何事

    def isAlive(self):
        # 判断动画是否存活
        if self.state == ANIME_FINISHED:
            return False
        return True
コード例 #2
0
class BattleWindow():
    def __init__(self, screen):
        self.screen = screen
        self.ctrlList = []
        # 创建导演
        self.director = Director(self.screen)
        # 创建定时器
        self.alarm = Alarm()
        self.alarm.setTimeout(1000)
        self.alarm.start()
        # 创建调试信息
        self.debugInfo = DebugInfo(screen)
        # fps相关
        self.fps_count = 0
        self.fps = 0

    def processEvent(self, event):
        pass

    def doModel(self):
        while True:
            for event in pygame.event.get():
                self.director.processEvent(event)
            # 导演类描画主窗体
            self.director.draw()
            # debug类描画调试信息
            self.debugInfo.clean()
            self.debugInfo.drawLine("fps: %d" % self.fps)

            if self.alarm.isTimeout():
                self.fps = self.fps_count
                self.fps_count = 0
            else:
                self.fps_count += 1

            pygame.display.update()