Problema con pantalla completa

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

Problema con pantalla completa

Notapor pablo9891 » Vie Ene 28, 2011 6:57 am

Basicamente el problema que estoy teniendo es que cuando mi juego se encuentra en pantalla completa, cada vez que se mueve alguno de los sprites queda una estela detras, a que se puede llegar a deber??

les dejo una foto del problema:

Imagen
pablo9891
 
Mensajes: 32
Registrado: Lun Dic 28, 2009 2:48 am

Re: Problema con pantalla completa

Notapor Juanxo » Vie Ene 28, 2011 8:38 am

código¿?

Estás rellenando a negro la pantalla cada vez que empiezas un frame?
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Problema con pantalla completa

Notapor pablo9891 » Vie Ene 28, 2011 3:58 pm

Código: Seleccionar todo
while(ejecuta)
{
  inicioTiempo = SDL_GetTicks();
  SDL_PumpEvents();
  key = SDL_GetKeyState(NULL);
  if(key[SDLK_ESCAPE])
  {
   ejecuta = false;
  }
  if(key[SDLK_UP])
  {
   pantalla = jugadorDos.moverImagen(1,pantalla);
  }
  if(key[SDLK_DOWN])
  {
   pantalla = jugadorDos.moverImagen(2,pantalla);
  }
  if(key[SDLK_s])
  {
   pantalla = jugadorUno.moverImagen(3,pantalla);
  }
  if(key[SDLK_p])
  {
   do
   {
    key = SDL_GetKeyState(NULL);
   }while(key[SDLK_p]);
  }
  if(key[SDLK_x])
  {
   pantalla = jugadorUno.moverImagen(4,pantalla);
  }
  jugadorUno.dibujarImagen(pantalla);
  jugadorDos.dibujarImagen(pantalla);
  miBalon.moverImagen(jugadorUno,jugadorDos,pantalla);
  admin.actualizaContadorUno(pantalla,50,50);
  admin.actualizaContadorDos(pantalla,1095,50);
  admin.velocidad(pantalla,miBalon.getVelX());
  admin.altura(pantalla,miBalon.getVelY());
  if(Sirius::punDos == 11 ||Sirius::punUno == 11 )
  {
   ejecuta = false;
  }
  admin.controlTiempo(inicioTiempo);
  SDL_Flip(pantalla);//ACTUALIZO PANTALLA
}



lo que hago cada vez que actualizo es borrar la posicion en que se encontraba el frame en la vuelta anterior y vuelvo a dibujarlo

Código: Seleccionar todo
SDL_Surface* Barra::borrarImagen(SDL_Surface* pantalla)
{
SDL_Rect rectangulo;

rectangulo.x = getX();
rectangulo.y = getY();
rectangulo.w = getAnc();
rectangulo.h = getAlto();
SDL_FillRect(pantalla,&rectangulo,SDL_MapRGB(pantalla->format,0,0,0));

return pantalla;
}



SDL_Surface* Barra::dibujarImagen(SDL_Surface* pantalla)
{
  SDL_Rect rectanguloDestino;
  rectanguloDestino.x = getX();
  rectanguloDestino.y = getY();

  SDL_BlitSurface(miFrame.img,NULL, pantalla, &rectanguloDestino);
  return pantalla;
}



ahi les dejo el codigo de como dibujo la imagen y de como la borro, la imagen la borro en otra funcion cuando recibo el evento que se produjo y actualizo la posicion del frame
pablo9891
 
Mensajes: 32
Registrado: Lun Dic 28, 2009 2:48 am

Re: Problema con pantalla completa

Notapor hugoruscitti » Vie Ene 28, 2011 5:30 pm

pablo9891 escribió:Basicamente el problema que estoy teniendo es que cuando mi juego se encuentra en pantalla completa, cada vez que se mueve alguno de los sprites queda una estela detras, a que se puede llegar a deber??


Yo había tenido un problema similar cuando hice el juego Ceferino... Resulta
que SDL, al funcionar en pantalla completa no habilita el doublebuffer a menos
que se lo indiques.

Es decir, si tu juego funciona en modo ventana, no hay problemas, por
omisión la ventana tendrá doublebuffer.

Entonces, en mi caso, había usado el flag SDL_DOUBLEBUF (o algo así)
en la inicialización del modo de video...

Avisanos si tu problema se resuelve con eso, según recuerdo en ceferino
lo había solucionado así.

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

Re: Problema con pantalla completa

Notapor pablo9891 » Vie Ene 28, 2011 6:32 pm

Es complicado lo que pasa porque estoy usando el doble buffer

Código: Seleccionar todo
//ACA ES DONDE CREO LA PANTALLA Y SE LA ASIGNO A SDL_DISPLAY
if((pantalla = SDL_SetVideoMode(anchoVen,altoVen, canBit,SDL_FULLSCREEN| SDL_DOUBLEBUF)) == NULL)
{
  return NULL;
}
pablo9891
 
Mensajes: 32
Registrado: Lun Dic 28, 2009 2:48 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