2011-09-08 14 views
5

Stavo facendo un semplice gioco in pygame e mi sono reso conto che avevo bisogno di un sacco di marcatori, conteggi e ogni sorta di staff globale. Così ho deciso di definire una classe e usarlo in questo modo:Devo usare la classe come contenitore per la variabile globale

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

e nel mio ciclo di gioco ho solo dare una variabile a tutte le mie funzioni:

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

So che questo metodo funziona e abbastanza conveniente (per me), ma mi chiedo come questo influenzerà la velocità del mio gioco, potrebbe essere che sto facendo qualcosa di orribile? Mille grazie per aver risposto.

risposta

2

Per favore, fai un favore a te stesso e ripensa il tuo progetto.

In primo luogo si potrebbe pensare che sia più facile per l'utente utilizzare le variabili globali. Puoi passare valori e puoi accedervi da ogni funzione senza passarla a loro usando i parametri. Ma quando si tratta di eseguire il debug o trovare errori o semplicemente guardare nel tuo codice dopo un po 'le variabili globali si stanno trasformando in un incubo. Perché dimentichi facilmente dove queste variabili avranno un impatto su altre funzioni o classi. Quindi, fai un favore a te stesso e ripensa il tuo design.

Un buon posto per le variabili "globali" potrebbe essere ad esempio la classe o la funzione principale. Dove tutto ha inizio. Immagino che ci sia un ciclo in cui alcune cose verranno ripetute in modo permanente. da lì puoi passarlo a classi o funzioni specifiche. Non conosco la tua architettura, ma raramente è utile avere variabili globali.

+1

Grazie per le parole di saggezza, cercherò di liberarmene. – HamsteR

+0

Se stai cercando di ottimizzare il tuo codice (ad es. Tempo o spazio di memoria), c'è sempre una cosa da fare: le misure. Se non ci sono miglioramenti enormi, usa la versione più comprensibile! – Thikron

1

Mentre io non conosco affatto il pitone, i globali in generale sono una cattiva idea. Suggerisco il modello Singleton. Anche se non è la migliore idea, è sicuramente meglio delle globali: Python and the Singleton Pattern

A parte questo, il tuo approccio mi sembra soddisfacente.

Problemi correlati