2014-11-06 49 views
0

使用pygame,我做了一個主菜單上的幾個按鈕。我可以檢測到按鈕被按下並做了一些事情。模塊沒有設置主文件變量內容

但是,控制按鈕按下時發生的代碼在另一個文件中(使用getattr),這似乎是導致一些問題。

我正在使用變量menu_open來控制與菜單有關的事情何時應該完成。當遊戲啓動並且在一次性開發者警告顯示(正常工作)之後,它被設置爲真。一切都按預期工作,直到我點擊我的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爲False時應創建一個白色屏幕):

012會使按鈕控制

代碼:打印報表

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的錯誤,請說明。

回答

0

解決此問題的正確方法是將變量移動到單獨的模塊。但是無論如何,我會解釋你做錯了什麼。

大概「程序啓動」在一個名爲main.py的文件中。通常當你想訪問一個模塊時,你可以通過路徑/文件名來導入它,在這種情況下,main。但是,解釋器調用的第一個腳本是而不是,它的路徑/文件名以命名,而不是,不管其他任何東西,都命名爲__main__。所以正確的導入方式,不是你應該做的,是使用import __main__,然後通過該名稱訪問它。

+0

所以我需要在多個文件中的任何變量都應該在自己的文件中?什麼是錯誤的使用__main__?它是否需要主程序運行才能正常工作? – Thedudxo 2014-11-07 20:04:00

+0

正確,並且正確。如果您將模塊用於除關聯程序之外的任何其他模塊,則行爲可能未定義。 – 2014-11-07 20:06:25