Inicios gráficos con SDL

En un intento de seguir los pasos de un pdf, he terminado haciendo un breve código como iniciación al SDL, librería gráfica que usaré para el juego que estoy programando.


Hay código redundante y se podría mejorar, pero lo he dejado así ya que me parece mejor a la hora de entenderlo y ver cómo funciona. Como único detalle, la ruta de la fuente es la mía personal, hay que cambiarla para que funcione. En general, la fuente se dejaría junto al código fuente, pero paso de hacerlo tan estricto.

Comienzos gráficos SDL: Pulsa para ver/ocultar el código
/* 
 * File:   main.cpp
 * Author: dorian
 *
 * Created on 25 de agosto de 2013, 11:20
 */

#include <iostream>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>

using namespace std;
void waitKey();

/*
 * 
 */
int main() {
    //creamos un lienzo donde pintar
    SDL_Surface *screen;

    //inicializamos el "video" (la pantalla). -1 indica error
    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        cout << "No se ha podido iniciar SDL: %s\n" << SDL_GetError();
        exit(1);
    } else {
        //cuando el programa se cierre, ejecuta la función SDL_Quit 
        //que libera la inicialización
        atexit(SDL_Quit);
    }

    //mismo procedimiento para el módulo de la escritura
    if (TTF_Init() < 0) {
        cout << "No se puedo inicializar SDL_ttf\n";
        exit(1);
    } else {
        atexit(TTF_Quit);
    }

    //establezco pantalla de 640x480 a 32 bits de profundidad y que use la
    //memoria de vídeo y una estrategia de doble buffer para repintado
    screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE| SDL_DOUBLEBUF);
    if (screen == NULL) {
        cout << "No se ha podido establecer el modo de vídeo: %s\n" << SDL_GetError();
        exit(1);
    }

    //titulo para la ventana
    SDL_WM_SetCaption("¡¡Hola Mundos del Videojuego!!", NULL);

    //abro una fuente del sistema
    TTF_Font *fuente=TTF_OpenFont( "/usr/share/fonts/TTF/VeraMono.ttf", 22 );
    if(fuente == NULL){
        cout << "error!!!!";
    }
    //creo un color
    SDL_Color blanco;
    blanco.r=255;
    blanco.g=255;
    blanco.b=255;
    
    SDL_Color negro={0,0,0};
    
    //creo una imagen para el texto
    SDL_Surface *texto; 
    //escribo el texto con la fuente pasada, el texto, el color del texto y el del fondo
    texto = TTF_RenderText_Shaded(fuente, "^^ Bienvenido a los mundos del videojuego ^^", blanco, negro); //texto
    //establezco unas coordenadas donde empezar a escribir
    SDL_Rect coordenadas;
    coordenadas.x=10;
    coordenadas.y=100;
    
    //copio la imagen del texto a la principal
    SDL_BlitSurface(texto, NULL, screen, &coordenadas);
    //actualiza la imagen
    SDL_Flip (screen);
   
    
    waitKey();
    
    texto = TTF_RenderText_Shaded(fuente, "Preparados... listos...", blanco, negro); //texto
    //establezco unas coordenadas donde empezar a escribir
    coordenadas;
    coordenadas.x=50;
    coordenadas.y=200;
    
    //copio la imagen del texto a la principal
    SDL_BlitSurface(texto, NULL, screen, &coordenadas);
    //actualiza la imagen
    SDL_Flip (screen);

    waitKey();
    
    //limpio la pantalla
    SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0,0,0));
    texto = TTF_RenderText_Shaded(fuente, "Que gane el mejor!", blanco, negro); //texto
    SDL_BlitSurface(texto, NULL, screen, &coordenadas);
    SDL_Flip(screen);
    
    waitKey();

    return 0;
}

void waitKey(){
    //creo un evento
    SDL_Event event;
    int done=0;
    //mientras no haya pulsado tecla...
    while (done == 0) {
        //espero por un evento
        while (SDL_PollEvent(&event)) {
            //si es una pulsación de tecla...
            if (event.type == SDL_KEYDOWN)
                done = 1;
        }
    }
}

Etiquetas: ,,. Guarda el enlace permanente.

Deja un comentario ^^