2011-09-08 10 views
5

Estaba haciendo un juego simple en pygame y me di cuenta de que necesito un montón de marcadores, recuentos y todo tipo de personal global. Así que decidí definir una clase y utilizar de esta manera:Debo usar la clase como contenedor para la variable global

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

y en mi bucle de juego Acabo de dar una variable a todas mis funciones:

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

Sé que este método funciona y bastante conveniente (para mí), pero me pregunto cómo va a afectar esto la velocidad de mi juego, ¿puedo estar haciendo algo horrible? Muchas gracias por responder.

Respuesta

2

Por favor, hazte un favor y reconsidera tu diseño.

En primer lugar, puede pensar que le resulta más fácil usar variables globales. Puede pasar los valores y puede acceder a ellos desde cada función sin pasárselas mediante parámetros. Pero cuando se trata de depurar o encontrar errores o simplemente observar su código después de un tiempo, las variables globales se están convirtiendo en una pesadilla. Porque se olvida fácilmente de dónde estas variables tendrán impacto en otras funciones o clases. Entonces, hazte un favor y reconsidera tu diseño.

Un buen lugar para sus variables "globales" podría ser, por ejemplo, la clase o función principal. Donde todo comienza. Supongo que hay un ciclo en el que algunas cosas se repetirán de forma permanente. desde allí puede pasarlo a las clases o funciones específicas. No conozco su arquitectura, pero rara vez es útil tener variables globales.

+1

Gracias por las palabras de sabiduría, intentaré deshacerme de ellas. – HamsteR

+0

Si intenta optimizar su código (por ejemplo, tiempo o espacio de memoria), siempre debe hacer una cosa: Mediciones. Si no hay una gran mejora, ¡utilice la versión que sea más comprensible! – Thikron

1

Aunque no conozco a Python en absoluto, los globales en general son una mala idea. Sugiero el patrón de Singleton. Si bien tampoco es la mejor idea, sin duda es mejor que los globales: Python and the Singleton Pattern

Aparte de eso, su enfoque me parece bien.

Cuestiones relacionadas