Reset and restart pygame program doesn#39;t work(重置并重新启动pyGame程序不起作用)
本文介绍了重置并重新启动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.board
和s.start_position
指的是同一个对象。如果您更改其中一个对象,则另一个对象似乎也会以相同的方式更改,因为只有一个对象。
您需要在启动游戏时制作棋盘对象的深度副本,或者需要在游戏重新启动时重置该对象。
copy
模块。deepcopy
可以创建对象的深层副本:
import copy
self.board = copy.deepcopy(s.start_position)`
注意,并非所有对象都可以深度复制。例如,pygame.Surface
不能深入复制。
这篇关于重置并重新启动pyGame程序不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:重置并重新启动pyGame程序不起作用
猜你喜欢
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
- python-m http.server 443--使用SSL? 2022-01-01
- 沿轴计算直方图 2022-01-01
- 如何将一个类的函数分成多个文件? 2022-01-01
- pytorch 中的自适应池是如何工作的? 2022-07-12
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01