zoukankan      html  css  js  c++  java
  • Control类

    Control 是状态机类,main函数是游戏的主循环,setup_states函数设置游戏启动时运行的状态。

    class Control():
    def __init__(self):
    self.screen = pg.display.get_surface()
    self.done = False
    self.clock = pg.time.Clock()
    self.fps = 60
    self.current_time = 0.0
    self.keys = pg.key.get_pressed()
    self.state_dict = {}
    self.state_name = None
    self.state = None

    def setup_states(self, state_dict, start_state):
    self.state_dict = state_dict
    self.state_name = start_state
    self.state = self.state_dict[self.state_name]

    def main(self):
    while not self.done:
    self.event_loop()
    self.update()
    pg.display.update()
    self.clock.tick(self.fps)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    event_loop函数负责监听输入(键盘输入和退出按钮),slef.keys 保存键盘输入。
    update函数会检测状态的done值,调用状态的更新函数。如果检测到当前状态结束,就调用flip_state函数进行旧状态的清理操作,并转换到下一个状态。

    def update(self):
    self.current_time = pg.time.get_ticks(http://www.amjmh.com/v/)
    if self.state.done:
    self.flip_state()
    self.state.update(self.screen, self.keys, self.current_time)

    def flip_state(self):
    previous, self.state_name = self.state_name, self.state.next
    persist = self.state.cleanup()
    self.state = self.state_dict[self.state_name]
    self.state.startup(self.current_time, persist)

    def event_loop(self):
    for event in pg.event.get():
    if event.type == pg.QUIT:
    self.done = True
    elif event.type == pg.KEYDOWN:
    self.keys = pg.key.get_pressed()
    elif event.type == pg.KEYUP:
    self.keys = pg.key.get_pressed()

  • 相关阅读:
    互斥锁
    信号量、互斥体和自旋锁
    【设计模式】template method(模板方法)-- 类行为型模式5.10
    C/C++中的auto关键词
    【设计模式】observer(观察者)-- 对象行为型模式5.7
    UML图
    MapReduce阅读
    shell提取文件后缀名,并判断其是否为特定字符串
    shell编程--遍历目录下的文件
    Linux shell字符串截取与拼接
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11535779.html
Copyright © 2011-2022 走看看