Tengo esto hecho, la segunda imagen que cargo tiene 4 cuadrados a los que quiero rebordear y que cuando le haga click ejecuten diversos codigos. Alguien sabe como se hace?
estuve mirando por los ejemplos de Foo pero los del raton no me compilan. Y solo hay un ejemplo con cuadrados. Ando a ver si lo doy hecho pero se me complica. Tengo otro codigo hecho, pero solo se ven los cuadrados, no se como cargarlos encima de las imagenes.
#include <SDL.h>
#include <iostream>
using namespace std;
const short int ANCHO_VENTANA = 454;
const short int ALTO_VENTANA = 340;
const int TIEMPO_DELAY_IMAGEN_UNO = 3000;
const int TIEMPO_DELAY_IMAGEN_MENU = 5000;
SDL_Window* pVentana = NULL;
SDL_Surface* pSuperficie = NULL;
SDL_Surface* pImagen = NULL;
bool Inicializar();
bool CargarImagen();
bool CargarImagenMENU();
void Cerrar();
void CargarImagenEnMain();
void CargarImagenMENUEnMain();
//-------------------------------------------------------------------------------
int main(int argc, char* args[])
{
if (!Inicializar())
{
cout << "Error al inicializar en main" << endl;
}
else
{
CargarImagenEnMain();
CargarImagenMENUEnMain();
}
Cerrar();
return 0;
}
//-------------------------------------------------------------------------------
bool Inicializar()
{
bool inicializado = true;
if (SDL_Init(SDL_INIT_VIDEO)<0)
{
cout << "Error Inicializando Video: " << SDL_GetError() << endl;
inicializado = false;
}
else
{
pVentana = SDL_CreateWindow("RPG DRAGON",SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, ANCHO_VENTANA, ALTO_VENTANA,/*SDL_WINDOW_FULLSCREEN &&*/ SDL_WINDOW_SHOWN);
if (pVentana == NULL)
{
cout << "Error al crear la ventana" << endl;
}
else
{
pSuperficie = SDL_GetWindowSurface(pVentana);
}
}
return inicializado;
}
//-------------------------------------------------------------------------------
bool CargarImagen()
{
bool inicializado = true;
pImagen = SDL_LoadBMP("DragonRPGINTRO.bmp");
if (pImagen==NULL)
{
cout << "Error al cargar Imagen1" << endl;
inicializado = false;
}
return inicializado;
}
//-------------------------------------------------------------------------------
bool CargarImagenMENU()
{
bool inicializado = true;
pImagen = SDL_LoadBMP("DragonRPGMENU.bmp");
if (pImagen==NULL)
{
cout << "Error al cargar ImagenMENU" << endl;
inicializado = false;
}
return inicializado;
}
//-------------------------------------------------------------------------------
void Cerrar()
{
SDL_FreeSurface(pImagen);
pImagen = NULL;
SDL_DestroyWindow(pVentana);
pVentana = NULL;
SDL_Quit();
}
//-------------------------------------------------------------------------------
void CargarImagenEnMain()
{
if (!CargarImagen())
{
cout << "Error al cargar la imagen en main." << endl;
}
else
{
SDL_BlitSurface(pImagen, NULL, pSuperficie, NULL);
SDL_UpdateWindowSurface(pVentana);
SDL_Delay(TIEMPO_DELAY_IMAGEN_UNO);
}
}
//-------------------------------------------------------------------------------
void CargarImagenMENUEnMain()
{
if (!CargarImagenMENU())
{
cout << "Error al cargar la imagenMENU en main." << endl;
}
else
{
SDL_BlitSurface(pImagen, NULL, pSuperficie, NULL);
SDL_UpdateWindowSurface(pVentana);
SDL_Delay(TIEMPO_DELAY_IMAGEN_MENU);
}
}
No programo en SDL (alguna vez la vi muy por encima, pero nada más) pero dando un vistazo rápido veo que lo del mouse es sencillo, muy similar a otras APIs. No sé por qué no te compile, pero básicamente es procesar el mensaje SDL_MOUSEBUTTONDOWN o SDL_MOUSEBUTTONUP. Luego, SDL_GetMouseState te devuelve las coordenadas del clic. Para ver si se dio dentro de un cuadro, puedes crear 5 SDL_Rect: 4 con las coordenadas y tamaños de cada cuadro, y uno con las coordenadas del mouse y ancho y alto en 1 pixel. Luego, comparas éste último con cada uno de los otros 4 mediante SDL_IntersectRect, que devuelve SDL_TRUE si las coordenadas se encuentran dentro.
Lo de los cuadrados, no sé a qué te refieras con cargarlos encima de las imágenes. Si es a dibujarlos, podría ser con SDL_RenderDrawRect, pero no sé si es lo que quieras.
Probare con esas funciones. El problema es que cuando dibujo los rectangulos, la superficie me sobrescribe la superficie de la imagen mostrada. Sigo probando!