与python全局变量混淆,pygame事件



我已经读了一些关于这个主题的其他问题,但我似乎仍然没有得到python全局变量的工作。

我有三个文件:main.py, menu.py和game.py。

menu.py包含一个由main执行的菜单函数;main的主循环有一个"running"变量,我希望其他文件中的函数能够将其设置为0,以便退出游戏。

但是我不能让它工作;例如,如果我这样做:

menu.py

...
class gameMenu():
def __init__(self, screen, background):
    #self.event = event
    global running
...
running = 0

main.py

...
from menu import *
...
global running
running = 1
title = gameMenu(screen, background)
title.run()
...
print running

但是,main总是打印1。我怎么能得到菜单修改运行变量在主要?

同样,在菜单循环中,我有这个函数:

for e in pygame.event.get():
         if e.type == pygame.QUIT:
            print 'Close!'
            self.isRunning = 0
            running = 0
         if e.type == pygame.JOYBUTTONDOWN:
            print 'Button Down!'
            self.isRunning = 0

这段代码在另一个程序中工作得很好,但在这个程序中,第二个if永远不会执行,老实说,我不明白为什么。

如果你需要完整的代码,它在这里:http://dumptext.com/KuwcaWpH

谢谢你的帮助。

在您的代码中,您没有将全局变量runningmain.py导入menu.py。-

if e.type == pygame.QUIT:
   print 'Close!'
   self.isRunning = 0
   running = 0

您只是将本地名称(变量)设置为0,这不会影响main.py中的running变量。您可能希望将以下行添加到函数的开头—def run(self):

def run(self):
    global running
    self.isRunning = 1

此外,似乎您在main.py中定义了running = 1,这可以遮蔽您想要从menu.py导入的running全局变量。试着去掉那条线。或者最好是这样做-

import menu

然后访问全局变量- menu.running

Python中的Global变量实际上只在单个文件的作用域中。该关键字用于允许局部作用域(如函数和循环)将值赋给更大作用域的变量。

当从一个文件到另一个文件时,导入才是你真正想要使用的。导入允许您查看来自另一个脚本的变量,而不仅仅是函数和对象。它也允许你分配给它们。虽然这些赋值不会影响保存在驱动器上的脚本,但它可以改变像running这样的值。

所以你可以写

from menu import running

然后检查并赋值。或者,如果您只是使用import menu,请参考runningmenu.running

相关内容

  • 没有找到相关文章

最新更新