与 python 全局变量混淆,pygame 事件
Confusion with python global variables, pygame event
我已经阅读了关于该主题的其他几个问题,但我似乎仍然无法使 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。我如何获取菜单来修改 main 中的 运行 变量?
此外,在菜单循环中我有这个功能:
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
感谢您的帮助。
Global
中的变量Python实际上只在单个文件的范围内。该关键字用于允许局部范围(如函数和循环)将值分配给范围更广的变量。
当从一个文件转到另一个文件时,导入才是您真正想要使用的。导入允许您查看来自另一个脚本的变量,而不仅仅是函数和对象。它也允许您分配给他们。虽然这些分配不会影响脚本,因为它保存在驱动器上,但它可以更改值,例如您的 running
.
所以你可以
from menu import running
然后检查并赋值。或者,如果您只是使用 import menu
,请参考 running
和 menu.running
。
在您的代码中,您无法将全局变量 running
从 main.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 全局变量起作用。
我有三个文件: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。我如何获取菜单来修改 main 中的 运行 变量?
此外,在菜单循环中我有这个功能:
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
感谢您的帮助。
Global
中的变量Python实际上只在单个文件的范围内。该关键字用于允许局部范围(如函数和循环)将值分配给范围更广的变量。
当从一个文件转到另一个文件时,导入才是您真正想要使用的。导入允许您查看来自另一个脚本的变量,而不仅仅是函数和对象。它也允许您分配给他们。虽然这些分配不会影响脚本,因为它保存在驱动器上,但它可以更改值,例如您的 running
.
所以你可以
from menu import running
然后检查并赋值。或者,如果您只是使用 import menu
,请参考 running
和 menu.running
。
在您的代码中,您无法将全局变量 running
从 main.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