• Python做一个计时器的动画


    一、问题
    在做连连看的时候需要加一个计时器的动画,这样就完成了计时功能的设计。


    二、解决
    主要思路:

    1、先产生一个画布,用深颜色填充满。

    2、产生一个新的矩阵用来覆盖画布,背景用白色,就可以渲染出来递减的感觉

    3、动态改变填充的位置,就完成增加和减少时间的动画效果

     1 # 时间画布、动画
     2 self.time_counter = tk.Canvas(self.root, width=22, height=180, bg="yellow")
     3 self.time_counter.place(x=615, y=80)
     4 
     5 # 时间显示
     6 self.show_time = tk.Label(self.root, bg="lightgrey", fg="purple", font="叶根友毛笔行书2.0版 15 bold", text=f"剩余时间
    {self.__time}s")
     7 self.show_time.place(x=590, y=20)
     8 
     9 # 计时函数
    10     def counter(self):
    11         """
    12         计时柱的构建
    13         :return:
    14         """
    15         try:
    16             fill_line = self.time_counter.create_rectangle(1.5, 1.5, 23, 0, width=0, fill="white")
    17             while self.__cycle >= 0:  # self.time 做循环量处理
    18                 self.n += self.__scalar
    19                 # 移动开始减少
    20                 self.time_counter.coords(fill_line, (0, 0, 80, self.n))
    21                 self.root.update()
    22                 self.__time -= 1
    23                 self.show_time.configure(text=f"剩余时间
    {self.__time}s", fg="purple")
    24                 time.sleep(1.0)  # 控制进度条流动的速度 1秒一次
    25                 # 时间结束  游戏结束  退出
    26                 if self.__time == 0:
    27                     tk.messagebox.showinfo("Tip", f"最后分数:{self.__score}")
    28                     self.__game_start = False
    29                     exit()
    30                 self.__cycle = self.__time  # 保证了和时间的一致性
    31         except Exception as e:
    32             _ = e.__traceback__
    33             exit()
    34 
    35 # 需要动态处理
    36     def detail(self):
    37         """
    38         消完之后做加分处理  加时处理
    39         :return:
    40         """
    41         # 加分处理
    42         self.__score += self.__score_level * self.__score_base
    43         self.show_score.configure(text=f"分数
    {self.__score}", fg="red")
    44 
    45         # 加时处理
    46         # 由于一秒一减少  所以self.n的值和self.__time的值一样
    47         self.__time += self.__add_time
    48         self.n -= self.__scalar * self.__add_time
    49         # 将溢出的全部删除
    50         if self.__time >= self.__large_time:
    51             self.show_time.configure(text=f"剩余时间
    {self.__large_time}s", fg="purple")
    52             self.__time = self.__large_time
    53             self.n = 0
    54         else:
    55             self.show_time.configure(text=f"剩余时间
    {self.__time}s", fg="purple")
    View Code

     

    三、结果呈现

     

    四、总结
    1、在使用的过程中,需要考虑循环的一致性,因此要采取while进行循环,而不是for。
    2、为了保证在任何情况下都可以使用,因此我用速率来控制增加量
    3、对游戏能否继续进行,进行判断不可以退出游戏

    五、参考
    如何做一个进度条,反过来就是一个时间计时器
    GitHub链接:https://github.com/pzq7025/game

  • 相关阅读:
    【C/C++开发】TinyXml操作(含源码下载)
    【C/C++开发】TinyXml操作(含源码下载)
    【计算机视觉】目标检测中的指标衡量Recall与Precision
    【计算机视觉】目标检测中的指标衡量Recall与Precision
    【图像处理】关于掩模的作用
    【图像处理】关于掩模的作用
    【神经网络与深度学习】【计算机视觉】YOLO2
    【神经网络与深度学习】【计算机视觉】YOLO2
    【神经网络与深度学习】【计算机视觉】SSD
    【神经网络与深度学习】【计算机视觉】SSD
  • 原文地址:https://www.cnblogs.com/future-dream/p/10887852.html
Copyright © 2020-2023  润新知