elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  SDL2 C++ Como puedo poner un rectangulo encima de una imagen?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: SDL2 C++ Como puedo poner un rectangulo encima de una imagen?  (Leído 2,250 veces)
@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
SDL2 C++ Como puedo poner un rectangulo encima de una imagen?
« en: 29 Mayo 2019, 08:38 am »

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.

Código
  1. #include <SDL.h>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. const short int ANCHO_VENTANA = 454;
  7. const short int ALTO_VENTANA = 340;
  8. const int TIEMPO_DELAY_IMAGEN_UNO = 3000;
  9. const int TIEMPO_DELAY_IMAGEN_MENU = 5000;
  10.  
  11. SDL_Window* pVentana = NULL;
  12. SDL_Surface* pSuperficie = NULL;
  13. SDL_Surface* pImagen = NULL;
  14.  
  15. bool Inicializar();
  16.  
  17. bool CargarImagen();
  18.  
  19. bool CargarImagenMENU();
  20.  
  21. void Cerrar();
  22.  
  23. void CargarImagenEnMain();
  24.  
  25. void CargarImagenMENUEnMain();
  26.  
  27. //-------------------------------------------------------------------------------
  28.  
  29.  
  30. int main(int argc, char* args[])
  31. {
  32. if (!Inicializar())
  33. {
  34. cout << "Error al inicializar en main" << endl;
  35. }
  36.  
  37. else
  38. {
  39. CargarImagenEnMain();
  40. CargarImagenMENUEnMain();
  41. }
  42.  
  43. Cerrar();
  44. return 0;
  45. }
  46.  
  47.  
  48. //-------------------------------------------------------------------------------
  49.  
  50.  
  51. bool Inicializar()
  52. {
  53. bool inicializado = true;
  54. if (SDL_Init(SDL_INIT_VIDEO)<0)
  55. {
  56. cout << "Error Inicializando Video: " << SDL_GetError() << endl;
  57. inicializado = false;
  58. }
  59.  
  60. else
  61. {
  62. pVentana = SDL_CreateWindow("RPG DRAGON",SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, ANCHO_VENTANA, ALTO_VENTANA,/*SDL_WINDOW_FULLSCREEN &&*/ SDL_WINDOW_SHOWN);
  63. if (pVentana == NULL)
  64. {
  65. cout << "Error al crear la ventana" << endl;
  66. }
  67.  
  68. else
  69. {
  70. pSuperficie = SDL_GetWindowSurface(pVentana);
  71. }
  72. }
  73. return inicializado;
  74. }
  75.  
  76. //-------------------------------------------------------------------------------
  77.  
  78. bool CargarImagen()
  79. {
  80. bool inicializado = true;
  81. pImagen = SDL_LoadBMP("DragonRPGINTRO.bmp");
  82. if (pImagen==NULL)
  83. {
  84. cout << "Error al cargar Imagen1" << endl;
  85. inicializado = false;
  86. }
  87. return inicializado;
  88. }
  89.  
  90. //-------------------------------------------------------------------------------
  91.  
  92. bool CargarImagenMENU()
  93. {
  94. bool inicializado = true;
  95. pImagen = SDL_LoadBMP("DragonRPGMENU.bmp");
  96. if (pImagen==NULL)
  97. {
  98. cout << "Error al cargar ImagenMENU" << endl;
  99. inicializado = false;
  100. }
  101. return inicializado;
  102. }
  103.  
  104. //-------------------------------------------------------------------------------
  105.  
  106. void Cerrar()
  107. {
  108. SDL_FreeSurface(pImagen);
  109. pImagen = NULL;
  110.  
  111. SDL_DestroyWindow(pVentana);
  112. pVentana = NULL;
  113.  
  114. SDL_Quit();
  115. }
  116.  
  117. //-------------------------------------------------------------------------------
  118.  
  119. void CargarImagenEnMain()
  120. {
  121. if (!CargarImagen())
  122. {
  123. cout << "Error al cargar la imagen en main." << endl;
  124. }
  125.  
  126. else
  127. {
  128. SDL_BlitSurface(pImagen, NULL, pSuperficie, NULL);
  129. SDL_UpdateWindowSurface(pVentana);
  130. SDL_Delay(TIEMPO_DELAY_IMAGEN_UNO);
  131. }
  132. }
  133.  
  134. //-------------------------------------------------------------------------------
  135.  
  136. void CargarImagenMENUEnMain()
  137. {
  138. if (!CargarImagenMENU())
  139. {
  140. cout << "Error al cargar la imagenMENU en main." << endl;
  141. }
  142.  
  143. else
  144. {
  145. SDL_BlitSurface(pImagen, NULL, pSuperficie, NULL);
  146. SDL_UpdateWindowSurface(pVentana);
  147. SDL_Delay(TIEMPO_DELAY_IMAGEN_MENU);
  148. }
  149. }


En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

RayR

Desconectado Desconectado

Mensajes: 239


Ver Perfil
Re: SDL2 C++ Como puedo poner un rectangulo encima de una imagen?
« Respuesta #1 en: 30 Mayo 2019, 20:53 pm »

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.


En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: SDL2 C++ Como puedo poner un rectangulo encima de una imagen?
« Respuesta #2 en: 31 Mayo 2019, 12:27 pm »

Probare con esas funciones. El problema es que cuando dibujo los rectangulos, la superficie me sobrescribe la superficie de la imagen mostrada. Sigo probando!
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como puedo poner una imagen al foro
Sugerencias y dudas sobre el Foro
Luish@o 1 2,985 Último mensaje 25 Julio 2009, 18:13 pm
por Og.
problema, ruta de los recursos. non-static method... No puedo poner una imagen.
Java
kinos 3 6,036 Último mensaje 27 Octubre 2009, 20:39 pm
por kinos
como puedo poner una imagen en c++ o c
Programación C/C++
Schiffer04 2 21,429 Último mensaje 4 Junio 2012, 06:00 am
por x64core
como poner un formulario encima de un jumbotron bootstrap 4
Desarrollo Web
colcrt 2 1,803 Último mensaje 11 Noviembre 2018, 18:12 pm
por #!drvy
Mostrar texto al poner el cursor encima de una imagen
Desarrollo Web
enrique4480 1 6,068 Último mensaje 21 Diciembre 2023, 19:12 pm
por .:Xx4NG3LxX:.
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines