Actualizar coordenadas de una imagen [SDL/C++]

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

Actualizar coordenadas de una imagen [SDL/C++]

Notapor darckbaston » Sab Sep 04, 2010 1:12 pm

Holas, les agradesco la ayuda que me dieron en el tema anterior me sirvio mucho gracias. Ahora estoy devuelta con otros problemas con las imagenes, mi problema es que quiero actualizar las coordenadas de una imagen ya existente y siempre me crea otra y si trato de borrar la anterior no lo hace. Alguien sabe como puedo hacer para hacer esto?

Aca les dejo un pequeño code donde tengo problemas (aunque me pasa en varios intentos que he echo):
Código: Seleccionar todo
void Test::Probar()
{
   SDL_Surface *m_Imagen;
   SDL_Rect m_DRect;

   m_Imagen = IMG_Load("Imagenes/PieceSelected.png");
   if(!m_Imagen)   
      printf("Error al cargar la imagen");

   m_DRect.h = 0;
   m_DRect.w = 0;
   m_DRect.x = 100+(50*4);
   m_DRect.y = 50+(50*4);
   
   SDL_BlitSurface(m_Imagen, NULL, SDL_MainScreen, &m_DRect);
   SDL_Flip(SDL_MainScreen);

   m_DRect.h = 0;
   m_DRect.w = 0;
   m_DRect.x = 100+(50*5);
   m_DRect.y = 50+(50*5);

   SDL_BlitSurface(m_Imagen, NULL, SDL_MainScreen, &m_DRect);
   SDL_Flip(SDL_MainScreen);
}
Última edición por darckbaston el Sab Sep 11, 2010 2:30 pm, editado 1 vez en total
Avatar de Usuario
darckbaston
 
Mensajes: 5
Registrado: Vie Ago 27, 2010 12:45 am
Ubicación: Argentina - Mendoza

Re: Detectar si se hizo click en una imagen [SDL/C++]

Notapor Juanxo » Sab Sep 04, 2010 2:08 pm

el tablero ocupa la pantalla entera? las imagenes de las piezas son del mismo tamaño que las del tablero?
En caso de ser así, yo lo haría de esta forma:

Código: Seleccionar todo
//Matriz que representa si una casilla esta ocupada o no
clase Casilla
{
  bool ocupado;
  SDL_Surface* base;
SDL_Surface* pieza;
}

Casilla tablero[8][8];

dentro del bucle de juego:

while(SDL_PollEvent(&evento))
{
  //No me acuerdo de como se hacia en SDL, pero el tema es comprobar si ha habido pulsacion de raton
  if (raton_pulsado && botton_pulsado == boton_izquierdo)
  {
    int fila = raton.y / alto_casilla;
    int columna = raton.x / ancho_casilla;
    if (tablero[fila][columna].ocupado)
    {
      //Obtenemos la posicion dentro de la casilla donde ha pulsado
      int offset_x = raton.x - columna * ancho_casilla;
      int offset_y = raton.y - fila * alto_casilla;
      if (pixel_de_imagen_pieza(offset_x, offset_y) == transparente)
        ha_pulsado_casilla = true;
      else
         ha_pulsado_pieza = false;
    }
    else
       ha_pulsado_casilla = true;
  }
}


hay pseudocódigo de por medio que deberás cambiar por las funciones SDL, que no recuerdo bien.
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Detectar si se hizo click en una imagen [SDL/C++]

Notapor carlostex » Dom Sep 05, 2010 2:55 am

Por si quieres implementar tu propia funcion, basicamente lo que se hace es verificar si el puntero se encuentra dentro de la imagen que quieres, que es detectar si un punto se encuentra dentro de un rectangulo, para eso vas a nececitar la funcion de sdl que lee la posicion del mouse, puedes encontrar mas detalles de como leer la posicion del puntero en los libros de SDL que se proporcionan en esta pagina. Incluso puedes hacer que se arrastre la imagen cuando la mantengas pulsada,
solo es cuestion de geometria
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Re: Detectar si se hizo click en una imagen [SDL/C++]

Notapor darckbaston » Dom Sep 05, 2010 3:01 am

Si me lo imagine eso de calcularo :) Muchas gracias por sus respuestas ahora voy a ver como me funciona tu codigo que me pasaste.
Avatar de Usuario
darckbaston
 
Mensajes: 5
Registrado: Vie Ago 27, 2010 12:45 am
Ubicación: Argentina - Mendoza

Re: Actualizar coordenadas de una imagen [SDL/C++]

Notapor darckbaston » Dom Sep 12, 2010 12:53 am

He actualizado el tema con una nueva duda que me salto y como tiene relacion con el tema de las imagenes, que me esta volviendo loco, lo edite y no cree un tema nuevo.

darckbaston escribió:Holas, les agradesco la ayuda que me dieron en el tema anterior me sirvio mucho gracias. Ahora estoy devuelta con otros problemas con las imagenes, mi problema es que quiero actualizar las coordenadas de una imagen ya existente y siempre me crea otra y si trato de borrar la anterior no lo hace. Alguien sabe como puedo hacer para hacer esto?

Aca les dejo un pequeño code donde tengo problemas (aunque me pasa en varios intentos que he echo):
Código: Seleccionar todo
void Test::Probar()
{
   SDL_Surface *m_Imagen;
   SDL_Rect m_DRect;

   m_Imagen = IMG_Load("Imagenes/PieceSelected.png");
   if(!m_Imagen)   
      printf("Error al cargar la imagen");

   m_DRect.h = 0;
   m_DRect.w = 0;
   m_DRect.x = 100+(50*4);
   m_DRect.y = 50+(50*4);
   
   SDL_BlitSurface(m_Imagen, NULL, SDL_MainScreen, &m_DRect);
   SDL_Flip(SDL_MainScreen);

   m_DRect.h = 0;
   m_DRect.w = 0;
   m_DRect.x = 100+(50*5);
   m_DRect.y = 50+(50*5);

   SDL_BlitSurface(m_Imagen, NULL, SDL_MainScreen, &m_DRect);
   SDL_Flip(SDL_MainScreen);
}
Avatar de Usuario
darckbaston
 
Mensajes: 5
Registrado: Vie Ago 27, 2010 12:45 am
Ubicación: Argentina - Mendoza

Re: Actualizar coordenadas de una imagen [SDL/C++]

Notapor carlostex » Dom Sep 12, 2010 1:41 am

Bueno los que hace el programa es correcto, le dices que compie la imagen con esa posicion y la muestras, luego copias otra ves la imagen a la superficie con otra posicion y la muestras de nuevo, lo que debe aparecer son las dos imagenes, nunca borraste la superficie, lo que hacen las funciones que usas son copiar pixeles y mostrarlos, la manera de evitar eso es poner un fondo del tamaño de la superficie, y luego copias todo lo que quieras, de esa forma primero se copiaran todos los pixeles del fondo y se sustituiran los anteriores.
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Re: Actualizar coordenadas de una imagen [SDL/C++]

Notapor darckbaston » Lun Sep 13, 2010 9:02 pm

Muchas gracias me sirvio =) eso lo habia intentado pero no sabia si habia una funcion que borrara la imagen ya creada para iniciarla de nuevo con otras caracteristicas.

No quiero sonar muy molesto pero con SDL_imagen toy tieniendo muchos problemas, ahora no me anda el SDL_SetAlpha() con una imagen png y lo hago bien comparando con otro juego.
Avatar de Usuario
darckbaston
 
Mensajes: 5
Registrado: Vie Ago 27, 2010 12:45 am
Ubicación: Argentina - Mendoza

Re: Actualizar coordenadas de una imagen [SDL/C++]

Notapor carlostex » Mar Sep 14, 2010 12:43 am

Para que usas el alpha, quieres atenuar la imagen, o darle un color de fondo, antes que algo, las imagenes png, tienen formato de pixel RGBA, por lo que les puedes dar trasparencias, y no es necesario darle dentro de sdl el valor del alpha "solo" se hace la trasparencia.
No se que tipos de problemas tengas con sdl_image, en realidad es facil, lee los libros de sdl, hay uno que esta orientado a videojuegos. y no creo que de haí puedas suponer lo que te he dicho, pero hay otro, tutorial de libsdl de antonio garcia, explica mas cosas, y te puede servir mas, no solo te hagas con una referencia, en esto de la programación de videojuegos siempre busca mas.
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Re: Actualizar coordenadas de una imagen [SDL/C++]

Notapor darckbaston » Mar Sep 14, 2010 4:38 pm

Si, lo que quiero hacer es una transparencia y que se vea lo que esta debajo de la imagen. Con problemas con SDL_imagen no son problemas reales sino que me esta costando lograr lo que yo quiero jajaja ahora si me parece que me bajare esos manuales que tu dices =) Muchas gracias de nuevo y siento ser medio molesto :)
Avatar de Usuario
darckbaston
 
Mensajes: 5
Registrado: Vie Ago 27, 2010 12:45 am
Ubicación: Argentina - Mendoza


Volver a Sobre las bibliotecas multimedia

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron