• <legend id='AHcLS'><style id='AHcLS'><dir id='AHcLS'><q id='AHcLS'></q></dir></style></legend>

    <small id='AHcLS'></small><noframes id='AHcLS'>

      • <bdo id='AHcLS'></bdo><ul id='AHcLS'></ul>
    1. <tfoot id='AHcLS'></tfoot>
      1. <i id='AHcLS'><tr id='AHcLS'><dt id='AHcLS'><q id='AHcLS'><span id='AHcLS'><b id='AHcLS'><form id='AHcLS'><ins id='AHcLS'></ins><ul id='AHcLS'></ul><sub id='AHcLS'></sub></form><legend id='AHcLS'></legend><bdo id='AHcLS'><pre id='AHcLS'><center id='AHcLS'></center></pre></bdo></b><th id='AHcLS'></th></span></q></dt></tr></i><div id='AHcLS'><tfoot id='AHcLS'></tfoot><dl id='AHcLS'><fieldset id='AHcLS'></fieldset></dl></div>

        重置并重新启动pyGame程序不起作用

        时间:2024-08-11

        1. <tfoot id='C0K5c'></tfoot>

              • <bdo id='C0K5c'></bdo><ul id='C0K5c'></ul>
              • <i id='C0K5c'><tr id='C0K5c'><dt id='C0K5c'><q id='C0K5c'><span id='C0K5c'><b id='C0K5c'><form id='C0K5c'><ins id='C0K5c'></ins><ul id='C0K5c'></ul><sub id='C0K5c'></sub></form><legend id='C0K5c'></legend><bdo id='C0K5c'><pre id='C0K5c'><center id='C0K5c'></center></pre></bdo></b><th id='C0K5c'></th></span></q></dt></tr></i><div id='C0K5c'><tfoot id='C0K5c'></tfoot><dl id='C0K5c'><fieldset id='C0K5c'></fieldset></dl></div>

                <small id='C0K5c'></small><noframes id='C0K5c'>

                <legend id='C0K5c'><style id='C0K5c'><dir id='C0K5c'><q id='C0K5c'></q></dir></style></legend>

                    <tbody id='C0K5c'></tbody>
                  本文介绍了重置并重新启动pyGame程序不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  当用户被要求重新启动时,我在pyGame中重置游戏时遇到问题。程序结构如下:

                  import board as b
                  
                  class Gui():
                      def __init__(self):
                          pygame.init()
                  
                          self.gamestate = b.GameState()
                  
                      def run(self):
                          running = True
                          while running:
                              for event in pygame.event.get():
                                  if event.type == pygame.KEYDOWN:
                                      if event.key == pygame.K_r:
                                          running = False
                                          pygame.quit()
                                          Gui().run
                  
                  if __name__ == '__main__':
                      Gui().run()
                  
                  当用户尝试重新启动时,会发生的情况是GUI关闭,While循环按他们应该的方式退出。然后它会打开一个新的窗口,但是没有清除游戏产业,所以我上次运行的游戏产业仍然在那里。我以为self.gamestate = b.GameState()行会为我创建一个新的游戏庄园,但似乎并非如此。以下是电路板文件中的一小段:

                  class GameState:
                  
                      def __init__(self):
                          self.board = s.start_position
                  

                  调用时以为会将板子设置为起始位置,将所有参数设置为初始位置,但是有些地方不太对劲,我已经3天没能解决这个问题了。希望您能帮我清理赌场,重新开始。

                  推荐答案

                  您使系统过于复杂。您实际上正在做的是递归地将新的Gui对象和新的应用程序循环实例化到现有的Gui对象和应用程序循环中。 如果GameState实现正确,创建一个新的GameState对象并继续现有的应用程序循环就足够了,而不是递归地创建一个新的Gui实例:

                  import board as b
                  
                  class Gui():
                      def __init__(self):
                          pygame.init()
                  
                          self.gamestate = b.GameState()
                  
                      def run(self):
                  
                          running = True
                          while running:
                  
                              for event in pygame.event.get():
                                  if event.type == pygame.QUIT:
                                      running = False
                                      pygame.quit()
                  
                                  if event.type == pygame.KEYDOWN:
                                      if event.key == pygame.K_r:
                                          self.gamestate = b.GameState()
                  
                              # [...]
                  
                  if __name__ == '__main__':
                      Gui().run()
                  

                  指令self.board = s.start_position不创建新的Board对象。self.boards.start_position指的是同一个对象。如果您更改其中一个对象,则另一个对象似乎也会以相同的方式更改,因为只有一个对象。
                  您需要在启动游戏时制作棋盘对象的深度副本,或者需要在游戏重新启动时重置该对象。

                  解决方案可能是使用Pythoncopy模块。deepcopy可以创建对象的深层副本:

                  import copy
                  
                  self.board = copy.deepcopy(s.start_position)`
                  

                  注意,并非所有对象都可以深度复制。例如,pygame.Surface不能深入复制。

                  这篇关于重置并重新启动pyGame程序不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:需要在不通信的情况下避免子进程死锁 下一篇:电子游戏控制器支持的问题

                  相关文章

                  <i id='ZUh8a'><tr id='ZUh8a'><dt id='ZUh8a'><q id='ZUh8a'><span id='ZUh8a'><b id='ZUh8a'><form id='ZUh8a'><ins id='ZUh8a'></ins><ul id='ZUh8a'></ul><sub id='ZUh8a'></sub></form><legend id='ZUh8a'></legend><bdo id='ZUh8a'><pre id='ZUh8a'><center id='ZUh8a'></center></pre></bdo></b><th id='ZUh8a'></th></span></q></dt></tr></i><div id='ZUh8a'><tfoot id='ZUh8a'></tfoot><dl id='ZUh8a'><fieldset id='ZUh8a'></fieldset></dl></div>
                  <legend id='ZUh8a'><style id='ZUh8a'><dir id='ZUh8a'><q id='ZUh8a'></q></dir></style></legend>

                  1. <small id='ZUh8a'></small><noframes id='ZUh8a'>

                    • <bdo id='ZUh8a'></bdo><ul id='ZUh8a'></ul>

                    <tfoot id='ZUh8a'></tfoot>