• 状态类


    先定义一个State 基类, 按照上面说的状态需要的三个操作分别定义函数(startup, update, cleanup)。在 init 函数中定义了上面说的三个变量(next,persist,done),还有start_time 和 current_time 用于记录时间。

    class State():
    def __init__(self):
    self.start_time = 0.0
    self.current_time = 0.0
    self.done = False
    self.next = None
    self.persist = {}

    @abstractmethod
    def startup(self, current_time, persist):
    '''abstract method'''

    def cleanup(self):
    self.done = False
    return self.persist

    @abstractmethod
    def update(sefl, surface, keys, current_time):
    '''abstract method'''
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    看一个状态类LoadScreen的具体实现,这个状态的显示效果如图3。
    startup 函数保存了传入的persist,设置 next 为Level 状态类,start_time保存进入这个状态的开始时间。初始化一个Info类,这个就是专门用来显示界面信息的。
    update 函数根据在这个状态已运行的时间(current_time - self.start_time),决定显示内容和是否结束状态(self.done = True)。

    class LoadScreen(State):
    def __init__(self):
    State.__init__(self)
    self.time_list = [2400, 2600, 2635]

    def startup(self, current_time, persist):
    self.start_time = current_time
    self.persist = persist
    self.game_info = self.persist
    self.next = self.set_next_state(http://www.amjmh.com/v/BIBRGZ_558768/)

    info_state = self.set_info_state()
    self.overhead_info = Info(self.game_info, info_state)

    def set_next_state(self):
    return c.LEVEL

    def set_info_state(self):
    return c.LOAD_SCREEN

    def update(self, surface, keys, current_time):
    if (current_time - self.start_time) < self.time_list[0]:
    surface.fill(c.BLACK)
    self.overhead_info.update(self.game_info)
    self.overhead_info.draw(surface)
    elif (current_time - self.start_time) < self.time_list[1]:
    surface.fill(c.BLACK)
    elif (current_time - self.start_time) < self.time_list[2]:
    surface.fill((106, 150, 252))
    else:
    self.done = True

  • 相关阅读:
    flash编程实例源代码下载
    js4:with,for in语句,windows,location对象的使用
    js3:数据类型,数组,String各个属性,以及字符串表达式用eval计算
    挺喜欢这个网站的
    C#Url传递中文参数时解决方法
    .NET设计模式系列文章《转》
    maven surefire plugin介绍
    spring-boot-maven-plugin 插件的作用
    github提交表情包
    接口管理工具
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11535768.html
Copyright © 2020-2023  润新知