genbetadev / Genbeta-Dev-Engine

Desarrollo de un Game Engine básico sobre C++ y SFML 2.1
MIT License
63 stars 32 forks source link

Crear clase App #3

Open adrigm opened 10 years ago

adrigm commented 10 years ago

La clase App será una clase con el patrón Singleton que se encargaré del arranque y parada del Engine.

DavidBM commented 10 years ago

Como funcionaría? No tengo muy claro que hace esta clase.

adrigm commented 10 years ago

Pues básicamente esta será la clase que inicialice el motor y contenga al game loop. Se encargará de crear la ventana con la configuración adecuada.

También sera la que inicialice el Gestor de Escenas y el Gestor de Recursos.

La idea es que sea un Singleton para acceder a ella desde cualquier lugar y que te de acceso al SceneManager al AssetManager y a la a ventana de la aplicación.

DavidBM commented 10 years ago

Esto es algo que no se muy bien como resolverlo. Si tenemos una clase que inicializa el gestor de escenas y el gestor de recursos y además tiene el main loop. No se necesitará acceder a ella, no? Basicamente todo estára dentro suya.

Nunca he llegado a estructurar un motor completo, por lo que me pierdo un poco. No se muy bien como es cada clase principal.

adrigm commented 10 years ago

Esta clase principal llama a los métodos de una clase Scene que cambia durante la ejecucción del juego. Desde estas clases Scene necesitamos poder acceder a la aplicación.

Cuando haga el artículo dedicado a la clase App en Genbeta Dev seguramente lo comprenderás mejor.

DavidBM commented 10 years ago

Sería como un Handler? Instancia a las clases y luego estas se comunican con App para cambiar de estados o lo que necesiten?

adrigm commented 10 years ago

Quizás este artículo te aclare algo: http://razonartificial.com/2010/08/gestionando-escenas-con-pygame/

Es para python y pygame, y no es exactamente igual, pero la esencia es la misma.

DavidBM commented 10 years ago

Ahora todo tiene mucho más sentido. Está explicado de forma muy clara, además tus comentarios en el post ayudan mucho :) Te diría de hacerla yo, pero no se si sería mejor dejarlo a alguien que ya tenga experiencia en motores de juegos.

ArnauPrat commented 10 years ago

Un apunte.

No hay que confundir el patrón singleton con una variable global. El patrón singleton és un patrón que asegura que sólamente existe una única instáncia de una clase. En este caso está bien aplicado dado que solo queremos que haya una clase App. És decir, la motivación no és usar un patrón singleton para poder acceder desde cualquier lugar, sino porque queremos asegurar que solo haya una instáncia de esta clase, y que todo el mundo usa la misma instáncia. Para que una clase sea accesible desde cualquier lugar, no hace falta que sea singleton, me explico?

Un Saludo.

adrigm commented 10 years ago

@ArnauPrat, esa es la idea, quizás lo expresé mal. Me refiero a que lo llamemos desde donde lo llamemos, nos devuelva siempre la misma instancia.

rickyah commented 10 years ago

@ArnauPrat El singleton es una variable global. En el propio texto original del GoF se indica:

Singleton Intent

Ensure a class only has one instance, and provide a global point of access to it

Así que Singleton y global van de la mano.

ArnauPrat commented 10 years ago

@rickyah Gracias por la aclaración.