Sign up with your email address to be the first to know about new products, VIP offers, blog features & more.

Curso programación de videojuegos con SDL – ¡Hola mundo!

Comenzaremos con un ejemplo mínimo de SDL dónde abriremos una ventana con el título “Hola Mundo”. Para ello además del código en C prepararemos el Makefile para compilarlo. Podríamos haber usado un entorno de desarrollo integrado como Anjuta por ejemplo, pero ya que se trata de una iniciación a SDL lo mejor creo que es trabajar directamente sobre el compilador y los Makefile.

Makefile

Comenzaremos con el Makefile. Incluiremos además de “sdl-config” las librerías que hemos instalado en el paso anterior:

holamundo_sdl.c

Pasemos ahora a implementar nuestro primer programa con SDL. Será lo más sencillo posible y básicamente realizará las dos siguientes acciones:

  • Abrirá una ventana con el título “Hola Mundo SDL”.
  • Se cerrará cuando pulsemos “Tecla hacia arriba”.
Comentemos lo más importante del mismo:

  • Inicio de SDL y salida si algo falla.
  • Establecer modo de vídeo a 640×480 píxeles, 24 bits de profundidad de color (y salida si algo falla al igual que antes). Podéis apreciar que si existe error podemos capturarlo con “SDL_GetError()”
  • Ponemos el título a la pantalla:
  • Actualizamos la pantalla:
  • Obtenemos los eventos. En caso del evento ser: “Pulsación de tecla Flecha Arriba”, cerramos el programa. Como podéis apreciar el evento es almacenado en “event” que es una variable del tipo SDL_Event. Dentro de dicha varible accedemos al tipo de evento. El evento pulsación “Flecha Arriba” es: “SDL_KeyUp” como podéis observar.
  • aj.kaanbal

    Avanzando paso a paso. Gracias por el tutorial.
    Sólo un par de detalles. Las senencias “include” estan vacias.
    Yo agregué:

    #include "stdlib.h"
    #include "SDL/SDL.h"

    y funcionó.

    Otro detalle es en las siguientes líneas.

    if (screen == NULL)
    {
    printf("No se puede inicializar el modo gráfico: %s\n",
    SDL_GetError());
    exit(1);
    }

    faltaba un %s

  • Iba a comentarlo mismo que @aj.kaanbal

  • @aj.kaanbal: Muchas gracias por avisar, ya está corregido, el problema viene por no poder usar en HTML los símbolos: < y >

    Ya está arreglado eso y el %s que se me había olvidado.

    En breve publico otra entrega, un saludo y gracias de nuevo 🙂 (también a @elSant0).

  • Alexis

    muy buen tutorial , estoy experimentando con esto pero me sucede un error tal vez alguien me puede aclarar esto, cuando ejecuto el makefile la consola me ,arca un error de *** falta un separador , revizando el makefile este error se da justo cuando entra la linea de codigo $(shell $(SDL_CONFIG) –libs) segun lo q veo veo es por el espacio q se antepone segun el ejemplo intente quitarlo e incluso agregar un tab pero no me sirvio ninguna de esas opciones, pero si quito esa linea el makefile no marca ningun error…

    Seria de mucho ayuda si alguien me pudiera explicar como solventar este error

  • @Alexis, no sé si lo solucionaste pero me pasó lo mismo (recién arranco con C 🙂

    el tema es que la línea aparece cortada en el texto de arriba, cuando lo pegás en el Vi (o cualquier otro) debería ir todo en la misma línea…

    espero te sirva…

    saludos y gracias Javi por el tutorial!

  • SDL_KEYUP no representa la tecla Flecha Arriba, sino creo al evento lanzado cuando una tecla se suelta, el hecho es que para identificar qué letra se presiono se debe comparar con event.key.keysym.sym, y para el ejemplo de arriba la comparación sería:


    if(event.key.keysym.sym==SDLK_UP)
    terminar=1;

    http://www.libsdl.org/docs/html/sdlkey.html

  • @Rommel: a mí me funciona eso, de todas formas, veo que lo tuyo es más correcto, así que muchísimas gracias por el aporte.

  • Podrías añadir un

    void SDL_Delay(Uint32 ms);
    Después del SDL_Event event;

    SDL_Delay(10);
    Después de el while terminar == 0

    Esto para reducir el consumo de CPU, ya que si no hacemos esto el programa consume 100% de CPU… y al hacer este pequeño detalle que adaptamos a nuestras necesidades el programa baja de 90% de CPU a 1%

    Espero les sirva 😉

  • @maximi89: Muchísimas gracias :). Gran aporte.

    Tienes toda la razón, así mucho mejor.

  • _KURRY_

    estoy empezando en esto de programar,por puro entretenimiento,y veo que es complicado de cojones XDDD

    /home/kurry/360/CppApplication_1/main.c:17: undefined reference to SDL_Quit'
    /home/kurry/360/CppApplication_1/main.c:18: undefined reference to
    SDL_Init’
    /home/kurry/360/CppApplication_1/main.c:20: undefined reference to SDL_GetError'
    /home/kurry/360/CppApplication_1/main.c:23: undefined reference to
    SDL_SetVideoMode’
    /home/kurry/360/CppApplication_1/main.c:26: undefined reference to SDL_GetError'
    /home/kurry/360/CppApplication_1/main.c:30: undefined reference to
    SDL_WM_SetCaption’
    /home/kurry/360/CppApplication_1/main.c:31: undefined reference to SDL_Flip'
    /home/kurry/360/CppApplication_1/main.c:34: undefined reference to
    SDL_PollEvent’

    por quE da ese error?

  • @_KURRY_ es un problema del enlazador. ¿Has usado un make?

Leer entrada anterior
SEO

Cerrar