模块没有设置主文件变量内容

时间:2014-11-06 06:57:36

标签: python module pygame

使用pygame,我已经制作了一个主菜单,上面有几个按钮。我可以检测到按下按钮的时间并对其采取措施。

然而,控制按下按钮时发生的事情的代码是在另一个文件中(使用getattr),这似乎导致了一些问题。

我正在使用变量menu_open来控制何时应该完成与菜单相关的事情。当游戏启动并且在一次性开发警告显示(工作正常)之后,它被设置为True。一切都按预期工作,直到我点击我的new game按钮。这应该只是创建一个空白屏幕。没有任何反应。

我发现menu_open仍然是True。似乎正在发生的事情是控制new game按钮的代码在另一个文件中,并且由于我无法理解的原因,似乎使用了与我的主文件不同的menu_open版本。 (它没有将我的主文件menu_open设置为False,尽管它的测试打印语句打印False

控制按下按钮时发生的事情的代码:

def new_game():
print('starting a new game')
import main
main.menu_open=False
print(2,main.menu_open)

我的计划开始:

import pygame,commands #line 1
done = False
menu_open= False #deceleration of menu_open at start of program
game_playing = False

更新菜单的代码(当menu_open为假时应创建白屏):

def display_frame(self,screen):

    global menu_open
    print(1,menu_open)
    screen.fill(WHITE)

    if menu_open:
        screen.blit(menu_image,[0,0])
        for button in button_list:
            button.draw()

    pygame.display.flip()

导致按钮控件的代码:

def run_logic(self): #worth noting this is called right before display_frame()
        global mouse_pos,mouse_press
        mouse_pos = pygame.mouse.get_pos()
        mouse_press = pygame.mouse.get_pressed()

        for button in button_list:
            button.check() #runs the following:

def check(self):
    if self.hovered:
        if mouse_press[0] == True:
            try:
                command_to_call = getattr(commands,self.command)
                command_to_call()
            except:
                print('[DEV]: invalid command')

打印陈述的结果:

1 True  # button not pressed
1 True  # True here is my main files 'menu_open'
1 True
1 True
1 True
1 True
starting a new game   #button pressed
2 False   #false is the other files 'menu open'
1 True    # True here is my main files 'menu_open'
starting a new game
2 False
1 True
starting a new game
2 False
1 True
starting a new game
2 False
1 True #button released, menu still normal
1 True
1 True
1 True

我对多文件编程不是很有经验,所以感谢任何帮助。 也许值得注意我的IDE(pyscripter)错误很多pygame。 到目前为止,按钮控制工作正常。我已经使用它退出了按钮。

如果您需要我的程序中的更多代码,请随时问:) 如果我的代码很好,这只是python / pyscripter / pygame的错误,请说出来。

1 个答案:

答案 0 :(得分:0)

解决此问题的正确方法是将变量移动到单独的模块中。但无论如何,我都会解释你做错了什么。

大概是[...]程序的开始"位于名为main.py的文件中。通常当您想要访问模块时,可以通过路径/文件名导入它,在本例中为main。但是,解释器调用的第一个脚本以其路径/文件名命名,而是 始终 ,名为__main__,无论如何其他任何事情。因此,导入它的正确方法不是你应该这样做,是使用import __main__然后通过该名称访问它。