Me picó un poco la curiosidad sobre lo que se habla de los estados en el enlace que pone carlostex en esta conversación: viewtopic.php?f=9&t=1279
Así que estuve mirando el código. Hay algo que no me queda claro. En el gameengine, el método que se encarga de cambiar de estado es el siguiente:
void CGameEngine::ChangeState(CGameState* state)
{
// cleanup the current state
if ( !states.empty() ) {
states.back()->Cleanup();
states.pop_back();
}
// store and init the new state
states.push_back(state);
states.back()->Init();
}
Según entiendo lo que hace es sacar de la lista el último estado (que sería el que está actualmente ejecutándose) y meter e iniciar el nuevo.
En el mismo ejemplo, el Init() de un estado es así:
void CMenuState::Init()
{
SDL_Surface* temp = SDL_LoadBMP("menu.bmp");
bg = SDL_DisplayFormat(temp);
SDL_FreeSurface(temp);
printf("CMenuState Init\n");
}
Por lo tanto, cada vez que se cambia de estado, se recargan las imágenes ¿No supondría esto una pérdida de rendimiento? Este ejemplo es sencillo, pero en un juego completo imagino que sí, habría que cargar esas imágenes en otra parte.
Y otra cosa, si, por ejemplo, yo creo un estado que es el juego en sí, y otro que es un menú que puede aparecer durante el juego y al salir del menú quiero que el juego esté dónde lo dejé. Si lo hago así, se reiniciaría a cada vez. Imagino que habría que hacer como comenté con las imágenes, iniciar el juego en otra parte.
No sé si estoy en lo cierto con lo que comento, a ver si me aclaráis.
Saludos