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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error de compilacion con SDL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error de compilacion con SDL  (Leído 1,482 veces)
@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Error de compilacion con SDL
« en: 6 Mayo 2019, 17:29 pm »

Estoy aprendiendo a usar SDL.
Escribi un programa simple con la idea de que muestre 3 imagenes en pantalla.
La idea es que se muestre la primera imagen y tras unos segundos se muestre la siguiente.
 Quiero hacer un juego simple sin mucha funcionalidad para ir asimilamdo conceptos e ir aprendiendo el uso de SDL.

Quiero hacer como la tipica pantalla de inicio de juegos como pokemon.
La primera imagen es el titulo del juego.
Tras unos segundos la imagen cambia y se suele mostrar un video introductorio.
En mi caso de momento es la imagen2.

La imagen3 seria la imagen del menu principal. Mi idea es poner rectangulos sobre la superficie de cada
opcion del menu. Por ejemplo Nueva Partida. Y que al hacer click en el rectangulo se
llame a una funcion BucleDelJuego.



Tengo 1 error que no entiendo muy bien por que sucede.
Se me esta complicando aprender debido a que encuentro poca documentacion actualizada
para SDL2, me voy guiando por libros antiguos intentando actualizarlos mirando las cabeceras en la carpeta includes de SDL2 y siguiendo los ejemplos de Lazy Foo que son los unicos que me compilan sin
modificarlos.

main.cpp
Código
  1.  
  2. #include <SDL.h>
  3. #include <iostream>
  4. #include <string>
  5.  
  6. const int ANCHO_DE_VENTANA = 640;
  7. const int ALTO_DE_VENTANA = 480;
  8.  
  9. enum SuperficiesDeImagenes
  10. {
  11. imagen1 = 1,
  12. imagen2,
  13. imagen3,
  14. numeroDeImagenes
  15. };
  16.  
  17.  
  18. //Funcion para cargar una imagen:
  19. SDL_Surface* cargarSuperficie(std::string path);
  20.  
  21. //Ventana sobre la que renderizar:
  22. SDL_Window* gVentana = NULL;
  23.  
  24. //Superficie sobre la ventana:
  25. SDL_Surface* gScreenSurface = NULL;
  26.  
  27. //Imagen mostrada actualmente:
  28. SDL_Surface* gCurrentSurface = NULL;
  29.  
  30. //Imagenes que corresponden a las superficies
  31. SDL_Surface* gSuperficiesDeImagenes[numeroDeImagenes];
  32.  
  33. bool Inicializar()
  34. {
  35. bool Inicializado = true;
  36.  
  37. //Inicializar SDL:
  38. if (SDL_Init(SDL_INIT_VIDEO) <0)
  39. {
  40. std::cout << "Error inicializando  -> " << SDL_GetError() << std::endl;
  41. Inicializado = false;
  42. }
  43.  
  44. else
  45. {
  46. //Crear Ventana:
  47. gVentana = SDL_CreateWindow("Titulo de la ventana", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, ANCHO_DE_VENTANA, ALTO_DE_VENTANA, SDL_WINDOW_SHOWN);
  48.  
  49. //Si el puntero a ventana esta vacio: (no se creo) muestra error.
  50. if (gVentana == NULL)
  51. {
  52. std::cout << "Error al crear la ventana -> " << SDL_GetError() << std::endl;
  53. Inicializado = false;
  54. }
  55.  
  56. //Si la ventana está en el puntero:
  57. else
  58. {
  59. //Obtener superficie de la ventana:
  60. gScreenSurface = SDL_GetWindowSurface(gVentana);
  61. }
  62. }
  63.  
  64. return Inicializado;
  65. }
  66.  
  67.  
  68. bool CargarImagenes()
  69. {
  70. bool ImagenFueCargada = true;
  71.  
  72. //Cargar primer imagen:
  73. gSuperficiesDeImagenes[imagen1] = cargarSuperficie("nombredeimagen1.bpm");
  74. if (gSuperficiesDeImagenes[imagen1] = NULL)
  75. {
  76. std::cout << "Error cargando la primer imagen" << SDL_GetError() << std::endl;
  77. ImagenFueCargada = false;
  78. }
  79.  
  80. //Cargar segunda imagen:
  81. gSuperficiesDeImagenes[imagen2] = cargarSuperficie("nombredeimagen2.bpm");
  82. if (gSuperficiesDeImagenes[imagen2] = NULL)
  83. {
  84. std::cout << "Error cargando la segunda imagen" << SDL_GetError() << std::endl;
  85. ImagenFueCargada = false;
  86. }
  87.  
  88. //Cargar tercer imagen:
  89. gSuperficiesDeImagenes[imagen3] = cargarSuperficie("nombredeimagen3.bpm");
  90. if (gSuperficiesDeImagenes[imagen3] = NULL)
  91. {
  92. std::cout << "Error cargando la tercer imagen" << SDL_GetError() << std::endl;
  93. ImagenFueCargada = false;
  94. }
  95.  
  96. return ImagenFueCargada;
  97. }
  98.  
  99.  
  100. void Cerrar()
  101. {
  102.  
  103. //Eliminar superficies de la memoria;
  104. for (int i = 0; i < (numeroDeImagenes-1); i++)
  105. {
  106. SDL_FreeSurface( SuperficiesDeImagenes[ i ] );
  107. SuperficiesDeImagenes[i] = NULL;
  108. }
  109.  
  110. //Eliminar la Ventana:
  111. SDL_DestroyWindow(gVentana);
  112. gVentana = NULL;
  113.  
  114. //Cerrar SDL
  115. SDL_Quit();
  116. }
  117.  
  118. //Funcion cargar la superficie
  119. SDL_Surface* cargarSuperficie(std::string path)
  120. {
  121. //Cargar imagen en ruta especifica
  122. SDL_Surface* superficieCargada = SDL_LoadBMP( path.c_str() );
  123.  
  124. if (superficieCargada = NULL)
  125. {
  126. std::cout << "Error al cargar la superficie " << path.c_str() <<" Error:" << SDL_GetError() << std::endl;
  127. }
  128.  
  129. return superficieCargada;
  130. }
  131.  
  132.  
  133. int main ( int argc, char* args[])
  134. {
  135. //Iniciar SDL y crear la ventana:
  136. //Si la funcion Inicializar devuelve "false" = error:
  137. if (!Inicializar())
  138. {
  139. std::cout << "No se pudo Inicializar" << std::endl;
  140. }
  141.  
  142. else
  143. {
  144. if (!CargarImagenes())
  145. {
  146. std::cout << "No se pudo Cargar Imagenes" << std::endl;
  147. }
  148.  
  149. else //Si todo ha funcionado:
  150. {
  151. bool salirDeBucle = false;
  152.  
  153. //Variable para obtener entrada:
  154. SDL_Event e;
  155.  
  156. //Imagen por defecto o primer imagen a cargar.
  157. gCurrentSurface = gSuperficiesDeImagenes[imagen1];
  158.  
  159. while (salirDeBucle == false)
  160. {
  161. //Procesa cola de eventos hasta que no queden:
  162. while ( SDL_PollEvent(&e) !=0 )
  163. {
  164.  
  165. //Si el usuario presiona la X de cerrar ventana
  166. if(e.type == SDL_QUIT)
  167. {
  168. salirDeBucle = true;
  169. }
  170. }
  171. //Aplica la imagen actual:
  172. SDL_BlitSurface(gCurrentSurface, NULL, gScreenSurface, NULL);
  173.  
  174.    //Actualiza la superficie que pertenece a la ventana gVentana:
  175. SDL_UpdateWindowSurface(gVentana);
  176.  
  177. //Pausa la imagen actual X segundos
  178. SDL_Delay(7000);
  179.  
  180. //Carga la imagen2 en la superficie actual:
  181. gCurrentSurface = gSuperficiesDeImagenes[imagen2];
  182.  
  183. SDL_BlitSurface(gCurrentSurface, NULL, gScreenSurface, NULL);
  184. SDL_UpdateWindowSurface(gVentana);
  185. SDL_Delay(7000);
  186.  
  187. //Carga la imagen3 en la superficie actual:
  188. gCurrentSurface = gSuperficiesDeImagenes[imagen3];
  189.  
  190. SDL_BlitSurface(gCurrentSurface, NULL, gScreenSurface, NULL);
  191. SDL_UpdateWindowSurface(gVentana);
  192. SDL_Delay(7000);
  193.  
  194.  
  195.  
  196. }
  197. }
  198. }
  199.  
  200. Cerrar();
  201.  
  202. return 0;
  203. }
  204.  
  205.  

Error de compilacion:
||=== Build: Debug in SDL2TESTLIBS (compiler: GNU GCC Compiler) ===|
|In function 'bool CargarImagenes()':| 73|warning: suggest parentheses around assignment used as truth value [-Wparentheses]
81|warning: suggest parentheses around assignment used as truth value [-Wparentheses]|
89|warning: suggest parentheses around assignment used as truth value [-Wparentheses]|
|In function 'void Cerrar()':|
105|error: expected primary-expression before '[' token|
106|error: expected unqualified-id before '[' token|
|In function 'SDL_Surface* cargarSuperficie(std::__cxx11::string)':|
123|warning: suggest parentheses around assignment used as truth value [-Wparentheses]| ||=== Build failed: 2 error(s), 4 warning(s) (0 minute(s), 0 second(s)) ===|

Agradezco referemcias a documemtacion actualizada y cualquier ayuda con el codigo



En línea

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

Loretz

Desconectado Desconectado

Mensajes: 117


Ver Perfil
Re: Error de compilacion con SDL
« Respuesta #1 en: 6 Mayo 2019, 19:38 pm »

No se si será eso (tú sabrás), pero al compilador le resulta sospechoso, y por eso el primer warning, la asignación dentro del if:

Código:
if (gSuperficiesDeImagenes[imagen1] = NULL)



En línea

RayR

Desconectado Desconectado

Mensajes: 239


Ver Perfil
Re: Error de compilacion con SDL
« Respuesta #2 en: 6 Mayo 2019, 20:02 pm »

Es porque tienes esto:

Código:
SDL_FreeSurface( SuperficiesDeImagenes[ i ] );
SuperficiesDeImagenes[i] = NULL;

Pero SuperficiesDeImagenes no es un puntero. De hecho ni siquiera es ningún tipo de variable, sino sólo el nombre de un tipo de dato que has creado.

Como esto es algo muy básico, te recomendaría que no dejes de repasar apuntes o manuales de C++ que tengas. Es prácticamente imposible aprender algo complejo como programación de juegos sin tener antes conocimientos muy sólidos del lenguaje.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error De Compilacion :'( « 1 2 »
Programación Visual Basic
Petro_Boca 13 5,856 Último mensaje 2 Agosto 2010, 21:45 pm
por BlackZeroX
Error de compilacion
Programación Visual Basic
Mr.Blue 4 4,890 Último mensaje 22 Agosto 2010, 01:17 am
por Mr.Blue
error de compilacion
Programación C/C++
mapers 2 2,741 Último mensaje 8 Septiembre 2010, 13:27 pm
por JuszR
John the ripper Error de compilacion -- make: *** [generic.h] Error 1 --
GNU/Linux
hbenzin 2 3,904 Último mensaje 20 Agosto 2011, 23:42 pm
por hbenzin
error de compilacion
Programación C/C++
Chazy Chaz 1 2,646 Último mensaje 17 Octubre 2011, 14:28 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines