代码之家  ›  专栏  ›  技术社区  ›  ScalaBoy

窗户10秒钟内不会关上

  •  1
  • ScalaBoy  · 技术社区  · 6 年前

    start_ticks = pygame.time.get_ticks() 检查一下里面的计时器 for seconds > max_simulation_time .

    如果这可能是一个重要的细节,我会在Jupyter笔记本上运行代码。

    class Environment():
    
        def __init__(self, title):
    
            pygame.init()
    
            self.screen = pygame.display.set_mode((800, 800))
            pygame.display.set_caption(title)
    
            # ...
    
    
        def run(self):   
            carryOn = True
            max_simulation_time = 10
            start_ticks = pygame.time.get_ticks()
            while carryOn:
                seconds=(pygame.time.get_ticks()-start_ticks)/1000
                for event in pygame.event.get():
                    if (seconds > max_simulation_time):
                        carryOn = False
                        pygame.display.quit()
                        pygame.quit()
                        quit()
    
                agent_action = 1
                self.all_sprites.update(self.screen, agent_action)
                self.screen.fill((0, 40, 0))
                self.all_sprites.draw(self.screen)
                pygame.display.flip()
    
    
    if __name__ == "__main__":
        env = Environment("TEST")
        env.run()
    

    break 10秒后的动画,从一开始就开始(重置), 不关窗户

    更新:

    如果我这样做:

    class Environment():
    
        def __init__(self, title):
    
            pygame.init()
    
            self.screen = pygame.display.set_mode((800, 800))
            pygame.display.set_caption(title)
    
            # ...
    
    
        def run(self):   
            carryOn = True
            max_simulation_time = 10
            start_ticks = pygame.time.get_ticks()
            while carryOn:
                seconds=(pygame.time.get_ticks()-start_ticks)/1000
                if (seconds > max_simulation_time):
                    carryOn = False
                    pygame.display.quit()
                    pygame.quit()
                    quit()
                for event in pygame.event.get():
                    if (event.type == pygame.QUIT):
                        carryOn = False
                        pygame.display.quit()
                        pygame.quit()
                        quit()
            # ...
    
    if __name__ == "__main__":
        env = Environment("TEST")
        for epochs in range(1,3):
            env.run()
    

    <

    -------------------------------------------------------------------
    error                             Traceback (most recent call last)
    <ipython-input-1-102fa6124bbf> in <module>()
        515     #env.run()
        516     for epochs in range(1,3):
    --> 517         env.run()
    
    <ipython-input-1-102fa6124bbf> in run(self)
        471                 pygame.quit()
        472                 quit()
    --> 473             for event in pygame.event.get():
        474                 if (event.type == pygame.QUIT):
        475                     carry_on = False
    
    error: video system not initialized
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   ScalaBoy    6 年前

    要重新启动模拟,只需创建 Environment 并称之为 run error: video system not initialized pygame.quit() (取消所有模块的初始化)。你必须打电话 pygame.init() 再次阻止。

    pygame.display.quit() , quit() 实际上是不必要的(除了那些使用IDLE或者其他基于tkinter的ide的人),你可以在完成while循环后让Python像其他程序一样关闭游戏。

    class Environment:
    
        def __init__(self, title):
            pygame.init()
            self.screen = pygame.display.set_mode((800, 800))
            pygame.display.set_caption(title)
            # ...
    
        def run(self):
            carryOn = True
            max_simulation_time = 10
            start_ticks = pygame.time.get_ticks()
            while carryOn:
                seconds = (pygame.time.get_ticks()-start_ticks) / 1000
                if seconds > max_simulation_time:
                    carryOn = False
                for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        carryOn = False
    
            # ...
    
    if __name__ == "__main__":
        for epochs in range(1,3):
            Environment("TEST").run()
    

    如果不想创建新实例,还可以将 环境 甲级 reset

        2
  •  3
  •   Nick is tired Boris    6 年前

    我想这可能和检查你是否超过了 max_simulation_time 只有在你的 for event in pygame.event.get() 循环。

    这就是为什么只有当你移动鼠标时才会发生这种情况。在分支到for循环之前,请检查是否已超过该时间。