2011-09-08 41 views
5

我在pygame中做了一個簡單的遊戲,我意識到我需要一堆標記,計數和各種全局工作人員。所以我決定來定義一個類,並使用它像這樣:我應該使用class作爲全局變量的容器嗎

class Staff(): 
    def __init__(self): 
     self.modes={'menu':True,'spawning':False,'sprite_change':False} 
     self.timer=pygame.time.Clock() 
     self.tick_count=0 

,並在我的遊戲循環我只給一個變量,以我的所有功能:

def main_loop(): 
    staff=Staff() 
    while not done: 
     update_positions(staff) 
     clear_background(staff) 
     draw_sprites(staff) 

我知道這種方法的工作,相當方便(對我來說),但我不知道這會如何影響我的比賽速度,可能是我做了一件可怕的事情? 非常感謝您的回答。

回答

2

請你幫個忙,重新考慮你的設計。

首先,您可能認爲使用全局變量更容易。您可以傳遞值,並且可以從每個函數訪問它們,而無需使用參數將其傳遞給它們。但是,當涉及到調試或發現錯誤或者在一段時間之後查看代碼時,全局變量正變成一場噩夢。因爲你很容易忘記這些變量會影響其他功能或類別。所以,請你幫個忙,重新考慮你的設計。

您的「全局」變量的好地方可能是例如主類或函數。這一切始於何處。我想有一個循環,有些東西會永久重複。從那裏你可以將它傳遞給特定的類或函數。我不知道你的架構,但根本沒有全局變量。

+1

感謝智慧的話,我會盡量擺脫他們。 – HamsteR

+0

如果您想優化您的代碼(例如時間或內存空間),您應該始終做一件事:測量。如果沒有大的改進,那麼使用更易於理解的版本! – Thikron

1

雖然我根本不知道python,但一般情況下globals是一個壞主意。我建議Singleton模式。雖然這也不是最好的想法,但它肯定比全局的更好: Python and the Singleton Pattern

除此之外,你的方法對我來說似乎很好。

相關問題