使用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時應創建一個白色屏幕):
代碼:打印報表
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的錯誤,請說明。
所以我需要在多個文件中的任何變量都應該在自己的文件中?什麼是錯誤的使用__main__?它是否需要主程序運行才能正常工作? – Thedudxo 2014-11-07 20:04:00
正確,並且正確。如果您將模塊用於除關聯程序之外的任何其他模塊,則行爲可能未定義。 – 2014-11-07 20:06:25