jueves, 15 de octubre de 2015

Guía Introductoria SDL


Autor: José Medina.
Competencia: Aprendizaje Autónomo.
Asignatura: Interfaces Gráficas.


Para poder comenzar a programar en algún lenguaje es necesario tener el conocimiento previo de como funciona, un poco de historia, como es visto por otros programadores, es decir, conocer la parte teórica de un lenguaje o biblioteca que se desee aprender a utilizar por eso realizaremos una pequeña guía introductoria sobre conceptos y funciones que implica buscar en la documentación oficial y de Internet sobre SDL para obtener el conocimiento base de esta librería antes de comenzar a programar con el.

1.    Explique con detalle:

a)    ¿Qué es SDL?
    Simple DirectMedia Layer (SDL) es un conjunto de bibliotecas desarrolladas en el lenguaje de programación C que proporcionan funciones básicas para realizar operaciones de dibujo en dos dimensiones, gestión de efectos de sonido y música, además de carga y gestión de imágenes.

b)    ¿Que hace SDL_Init()?
       Permite inicializar las características de SDL.

c)    ¿Cómo inicializar con SDL una superficie de 1280x900 pixeles con 16 millones de colores?
        Screen = SDL_SetVideoMode(1280,900,24)
        24 bits es igual a 16 millones de colores.

d)    ¿Qué es una superficie en SDL y como se define?
    Una superficie es un bloque de memoria utilizado para almacenar una región rectangular de píxeles. En esta área de memoria podemos almacenar dibujar sobre ella, cargar imágenes, etc.

e)    ¿Qué hace la función SDL_BlitSurface?
       Permite mostrar una gráfico por pantalla, copiando el gráfico anteriormente cargado y copiandolo en la superficie visible.

f)     ¿Qué hace la función SDL_SetClipRect?
       Permite decirle a SDl que cualquier operación gráfica que se realice se quedara dentro del rectángulo del surface. En caso que el recurso gráfico sea mayor que el surface, se recorta. 


2.    Manejo de eventos en SDL:

a)    ¿Que son los eventos en SDL?
       Los eventos son las acciones realizadas por el usuario para interactuar con el software, como el uso de mouse, uso de teclado, etc.

b)    Nombre al menos 4 eventos detectados por SDL.
       -Eventos teclado.
       -Eventos Movimiento ratón.
       -Eventos Joystick.
       -Eventos cierre de ventana.

c)    ¿Cuáles son las 3 formas de manejar eventos en SDL?
       Detectar el evento, capturar el evento y sondeo o almacenamiento de eventos.

d)    ¿Qué hacen las siguientes funciones:
d.1) SDL_PollEvent( )
       Permite comprobar los eventos pendientes en cola.
d.2) SDL_KeyboardEvent( )
       Almacena los eventos relacionados con el teclado.
d.3) SDL_GetKeyState( )
       Devuelve el estado actual del teclado, 0 no presionado, 1 presionado.
d.4) SDL_MouseMotionEvent( )
       Captura el movimiento del mouse.
d.5) SDL_JoyAxisEvent( )
        Captura los movimientos del eje del joystick.
d.6) SDL_Quitevent( )
       Evento de cierre.
d.7) SDL_resizeEvent( )
       Evento de redimensionado de ventana.

3.    Manejo de tiempos en SDL:
a)    ¿Por qué es importante manejar el tiempo en SDL?
       Permite evitar que nuestra aplicación se ejecute excesivamente rápida en ordenadores de ultima generación, normalizando los tiempos de ejecución.

b)    ¿Qué hace la función SDL_GetTicks( )?
       Devuelve el número de mili segundos desde que se inicializo la librería SDL.

c)    ¿Qué hace la función SDL_Delay( )?
       Ordena a la aplicación que se detenga un determinado tiempo de segundos antes de continuar con la ejecución.

4.    Analice y explique que hace el siguiente ejemplo:
#include 
#include 
#include 

int main (int argc, char *argv[])
{
    SDL_Surface *image, *screen;
    SDL_Event event;
    SDL_Rect dest;
    int i, done = 0;

    atexit(SDL_Quit);

       if(SDL_Init(SDL_INIT_VIDEO)<0)
        {
            printf("Error de video");
            exit(1);
        }
    screen = SDL_SetVideoMode(800,500,24,SDL_HWSURFACE);
    if(screen == NULL)
    {
        printf("Error Modeo Grafico");
        exit(1);
    }
    image=SDL_LoadBMP("r2.bmp");
    SDL_SetColorKey(image, SDL_SRCCOLORKEY | SDL_RLEACCEL, SDL_MapRGB(image->format,255,0,0));

    for(i=1;i<=5;i++)
    {
        SDL_SetAlpha(image, SDL_SRCALPHA|SDL_RLEACCEL, rand()%255);
        dest.x = rand()%800;
        dest.y = rand()%500;
        dest.w = image->w;
        dest.h = image->h;
        SDL_BlitSurface(image,NULL,screen,&dest);
    }
    SDL_Flip(screen);
    SDL_FreeSurface(image);
    while(done==0)
    {
        while(SDL_PollEvent(&event))
        {
            if(event.type == SDL_KEYDOWN)
                done = 1;
        }
    }
    return 0;
}

La apliacion es bastante sencilla ya que lo que hace es inicializar SDL en modo video y el surface visible con sus resperctivas exepciones en caso de error. Luego carga una imagen la posiciona de forma random en la pantalla un total de cinco veces y en cada ocacion degrada los colores de la la imagen. 



Reflexión:

     La actividad anterior permite tener el conocimiento básico del funcionamiento de SDL indagando en el uso de sus funciones, la inicialización de pantalla, la captura de eventos, entre otras permitiéndonos adquirir conocimientos de forma autónoma al indagar en la documentación existente de SDL sobre los conceptos teóricos de su funcionamiento.

No hay comentarios:

Publicar un comentario