Problema para refrescar la pantalla

Tratamos sobre el manejo de APIs frecuentemente utilizadas en el desarrollo de videojuegos, como SDL, pygame o SFML.

Problema para refrescar la pantalla

Notapor JMP » Sab Jul 24, 2010 11:28 am

Estoy empezando con SDL y C++ y estoy teniendo un problema para poder refrescar se cala cuando lo ejecuto,

Código: Seleccionar todo
SDL_Rect rectangulo;
void Draw_scene (SDL_Surface *screen)
{
     
     rectangulo.x=nave.getx();
     rectangulo.y=nave.gety();
     rectangulo.w=nave.getw();
     rectangulo.h=nave.geth();
     SDL_FillRect (screen, &rectangulo, SDL_MapRGB(screen->format, 0, 0, 0));

     nave.setx(100);
     nave.sety(100);
     nave.draw(screen);
     
     SDL_Flip(screen);
     
}

esta la uso para que cambie el dibujo y la meto dentro del game loop

Código: Seleccionar todo
...
    bool salir = false;
    while (!salir)
          Draw_scene(screen);  //screen = SDL_SetVideoMode(height,width,n_bites,SDL_HWSURFACE);
         
          if (SDL_PollEvent(&event))
          {
            if (event.type==SDL_QUIT)
            {
               salir = true;
          }
         
    }
...

Me hace un dibujo y se cala

Gracias de antemano
JMP
 
Mensajes: 14
Registrado: Sab Jul 24, 2010 8:44 am

Re: Problema para refrescar la pantalla

Notapor Juanxo » Sab Jul 24, 2010 2:43 pm

buenas JMP:

podrías comentar un poco más el problema? Da algun error, sale directamente, se queda todo negro? y si puedes, enseñanos el codigo de nave.draw

Un saludo
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Problema para refrescar la pantalla

Notapor hugoruscitti » Sab Jul 24, 2010 3:49 pm

Buenas, ¿como estás?.

Por lo que veo tu programa tiene un pequeño error de sintáxis, y ese
es el responsable de que el juego no funcione.

Tienes lo siguiente:

Código: Seleccionar todo
while (!salir)
              sentencia;

              mas sentencias....


Pero si bien has identado respecto del margen, no definiste un bloque con llaves. Eso
hace que el compilador de C piense que tu bucle es solamente ejecutar esa
sentencia que está debajo del while, y no todas las sentencias de mas abajo.

En otras palabras, el compilador piensa que tienes algo como esto:

Código: Seleccionar todo
bool salir = false;

while (!salir)
          Draw_scene(screen);  //screen = SDL_SetVideoMode(height,width,n_bites,SDL_HWSURFACE);
         
if (SDL_PollEvent(&event))
{
    if (event.type==SDL_QUIT)
        salir = true;
}


donde solamente hay que ejecutar "Draw_scene" muchas, muchas veces.

Por eso, la solución es abrir un paréntesis ni bien inicia al bloque de while y cerrarlo
casi al final el programa.

Saludos.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Re: Problema para refrescar la pantalla

Notapor JMP » Sab Jul 24, 2010 7:34 pm

Tiene razón hugoruscitti ha sido un fallo tonto con los corchetes

muchas gracias por la ayuda

Así quedaria
Código: Seleccionar todo
    while (!salir)
    {
          Draw_scene();
          if (SDL_PollEvent(&event))
          {
            if (event.type==SDL_QUIT)
            {
              salir = true;
            }
          }
    }
JMP
 
Mensajes: 14
Registrado: Sab Jul 24, 2010 8:44 am


Volver a Sobre las bibliotecas multimedia

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado