首页 > 解决方案 > Pyglet 窗口在运行后不会重新打开

问题描述

我制作了一个 Snake 游戏程序,并制作了一个名为的函数Starting_screen(),它打开一个带有标签和精灵的窗口,显示游戏的开始菜单,玩家可以选择开始新游戏、查看排行榜或退出游戏.

我的主要问题是,在玩家完成 Snake 游戏后,我希望程序返回主菜单,但游戏退出后它只是挂起。我尝试print在函数中放置语句Starting_Screen(),它实际上打印了两次,表明它重新进入函数但没有再次打开窗口。程序的流程看起来有点像这样(更简单的意义上):
正在运行的游戏main.py有:

import interface
import engine

interface.main()
print('outside the interface.main()')
interface.main()

如您所见,我刚开始尝试放置两个interface.main()函数,以便检查程序是否运行第二个函数。它实际上打印了表明它退出函数的语句。

interface.main()仅运行,Starting_screen()并且Starting_screen()看起来像这样(简化):

def Starting_screen():

    print('inside starting screen')
    window = pyglet.window.Window()
    some_text = pyglet.text.Label()
    some_image = pyglet.image.load()

    @window.event
    def on_draw():
        window.clear()
        some_text.draw()
        some_image.draw()

    @window.event
    def on_key_press(symbol,modifier):
        if symbol == key.P:
            window.close()
            engine.main()

    pyglet.app.run()

并且engine.main()只是运行游戏(使用pygame)直到玩家输了,它pygame.display.quit()会终止engine.main()函数并返回到,Starting_screen()而后者又会终止函数。

我希望它会再次打开主菜单窗口,但它没有。但有趣的是,它运行print('inside starting screen') 了两次,表明它再次运行该函数,但它并没有像第一次运行时通常发生的那样打开窗口。

任何建议,将不胜感激。

标签: pythonpyglet

解决方案


推荐阅读