【问题标题】:Repeating Import Module - Python / Pygame重复导入模块 - Python / Pygame
【发布时间】:2014-05-04 17:29:51
【问题描述】:

我一直在 Pygame 中开发一个简单的游戏,我目前正处于为每个级别的事件(例如死亡)添加结果的阶段。目前,我将其设置为在按下 Enter 键时导入相同的模块,如果发生死亡,则关卡会“重新启动”。该代码在第一次“重新启动”时正常运行,但是如果我再次播放,它不会再次导入相同的关卡。

这是我到目前为止的代码:

    elif event.type == pygame.KEYDOWN and event.key == pygame.K_RETURN and health == 0:
        import PracticeLevel

我对python很陌生,所以如果出现任何错误,我深表歉意,感谢任何帮助:)

【问题讨论】:

    标签: python import module pygame


    【解决方案1】:

    这是一种非常奇怪的方法,但是您的问题是 python 在导入方面很“聪明”(它不会两次导入相同的模块)。导入更多地用于从模块中检索函数和类,并且不应该真正用于像您正在执行的那样只执行 python 文件。执行此类操作的一般方法是创建一个 run_level(filename) 函数,该函数将加载关卡数据并运行它,但是如果您不想更改当前格式,则应该使用 execfile("PracticeLevel.py") 而不是import 声明。

    编辑

    如果您使用的是 Python 3(其中execfile 不是内置函数),您可以编写

     exec(open(filename).read())
    

    【讨论】:

    • 非常感谢您的回复!我尝试了您提到的“execfile”解决方案,但是我遇到了一个错误,指出它尚未定义:(有什么建议吗?
    • 谢谢,它运行良好:) 还有一个问题,如果我要使用你的建议并且 PracticeLevel 文件位于子文件夹中,我如何将 PracticeLevel 文件链接回 MainMenu 文件位于父文件夹中?我尝试了 'exec(open("Alien/Menu.py").read())' 但是它没有看到该文件,是否有其他方法可以链接回父文件夹?谢谢
    • @Oscar 要打开上述目录中的文件,请查看stackoverflow.com/questions/4381569/…。可以做到,但不简单,这是为什么这种方法可能不是最好使用的几个原因之一。我的建议是,不要尝试从PracticeLevel.py 内部运行Menu.py(我假设您想在关卡完成后返回菜单)我会直接在您的exec(open('Practice..' 之后加载Menu.py .这样,它会在 PracticeLevel.py 完成运行后立即加载。
    猜你喜欢
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 2017-06-21
    • 2020-10-03
    • 2012-02-05
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多