ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Introduccion a SDL

Carlos ContrerasTarea19 de Noviembre de 2019

1.967 Palabras (8 Páginas)115 Visitas

Página 1 de 8

Practica 6

Entorno grafico en leguaje C: 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.

La biblioteca se distribuye bajo la licencia LGPL, que es la que ha provocado el gran avance y evolución de SDL.

SDL y los subsistemas

Un subsistema engloba a una parte específica del hardware con un propósito específico. En SDL es una parte de la librería que nos ofrece soporte a diferentes partes del hardware.

Los subsistemas soportados por SDL son:

Subsistema de Video: Engloba todo lo referente al hardware de video y lo referente a los gráficos. Subsistema de Audio: Es el encargado de la reproducción de sonidos y de la gestión del hardware destinado al audio.

Subsistema de Gestión de Eventos: Es la base de la interactividad con el usuario y con ciertos aspectos del sistema. Con este subsistema sabemos, por ejemplo, que desea hacer el usuario. Joysticks: Al no existir un estándar este subsistema nos permite un mayor control sobre los dispositivos de juegos.

CD-ROM: Nos permite controlar la reproducción de CD-Audio.

Timers: Nos permite sincronizar nuestro videojuego para que tenga la misma respuesta en diferentes tipos de sistemas.

Otros: Ademas de todos estos subsistemas existen diferentes extensiones que nos facilitarán el trabajo con SDL como SDL_image, SDL_ttf... Además de añadir funcionalidad, como SDL_net para el manejo de redes o SDL_mixer que nos proporciona que el subsistema de audio sea realmente manejable.

En este curso nos interesa el domino de los subsistemas de video y otros opcionales como el subsistema SDL_image que si bien no son obligatorios, facilitan la programación y mejoran considerablemente el diseño gráfico de nuestro programa.

Programando en SDL:

La mejor forma de empezar a comprender la potencia de este sistema es programando, veamos un ejemplo inicial y cada sección de código que debería ir como mínimo para levantar un programa con entorno gráfico, describamos parte a parte. (asumiendo que el sistema Linux ya tiene SDL instalado)

[pic 1][pic 2][pic 3][pic 4][pic 5][pic 6][pic 7][pic 8][pic 9][pic 10][pic 11][pic 12][pic 13][pic 14]

Primeros pasos: Descripción de instrucciones de SDL

A continuación se describen algunas instrucciones básicas para inicializar el servicio de SDL, así como su configuración inicial.

SDL_Init(Uint 32 flags)

Inicializa la librería SDL y sus subsistemas, esta tiene que ser la primera función ejecutada antes de llamar a otras instrucciones de SDL.

SDL_SetVideoMode( ancho,largo, colores, SDL_HWSURFACE )

Configura los parámetros del modo video como el ancho y largo de la ventana, el parámetro SDL_HWSURFACE indica que queremos que la ventana se cree en la memoria de video

SDL_WM_SetCaption(const char *title, const char *icon);

Configura el texto de la barra de título y el nombre del icono a usar.

SDL_Event event;

Cerrar la ventana, un clic de mouse o una tecla presionada, en SDL todos son eventos y el control de estos se hace mediante esta variable.

SDL_WaitEvent (&event)

Espera indefinidamente a que suceda un evento, recordemos que un evento puede ser un click o una tecla presionada.

SDL_Quit()

Termina todos los procesos de SDL y sus sub sistemas.

Ahora pongamos en práctica todo el código antes descrito:

Ejemplo 1

Mi primer programa con entorno gráfico (encontraremos este ejemplo en la carpeta de la práctica, se llama 1.c):

#include

#include

#include

SDL_Event event; /*variable de tipo SDL_event para capturer eventos*/

int main(){

/* Tratamos de inicializar la biblioteca SDL */

if (SDL_Init(SDL_INIT_VIDEO) < 0) {

printf("No se pudo inicializar SDL: %s\n", SDL_GetError());

exit(1);

}

[pic 15][pic 16][pic 17][pic 18][pic 19][pic 20][pic 21][pic 22][pic 23][pic 24][pic 25][pic 26][pic 27][pic 28][pic 29][pic 30][pic 31][pic 32][pic 33][pic 34][pic 35][pic 36][pic 37][pic 38][pic 39][pic 40][pic 41][pic 42]

/* configurar modo gráfico y cambiar el t ítulo de la ventana */

if( SDL_SetVideoMode( 640, 480, 16, SDL_HWSURFACE ) == NULL ) {

printf( "Error al entrar a modo grafico: %s\n", SDL_GetError() ); SDL_Quit();

return -1;

}

/*mensaje en la barra*/

SDL_WM_SetCaption( "Hola mundo!", "Hola Mundo!" );

/*dando funcionalidad al boton de cerrar esperamos hasta que ocurra un evento*/

while (SDL_WaitEvent (&event)){

switch (event.type)

{

case SDL_QUIT: SDL_Quit();

break;

default:


break;

}

}

return 0;

}

Para ejecutar se usa la siguiente instrucción:

gcc -o 1 1.c -lSDL -lpthread -lSDL_image

Nota importante:

Si da error con SDL_image es porque no está instalado en la distribución de linux, para este ejercicio se puede quitar el –lSDL_image pero para el resto de ejemplos se tendrán problemas para ejecutar.

El resultado debería de ser el siguiente:

[pic 43][pic 44][pic 45][pic 46][pic 47][pic 48][pic 49][pic 50][pic 51][pic 52][pic 53][pic 54]

Podemos ver un ejemplo semejante en la carpeta de la práctica llamado 2.c

Este programa solo levanta una ventana negra, ahora introduciremos la definición de canvas, un canvas es traducido literalmente como “lienzo”, esto es, como su nombre nos indica, donde dibujaremos todo lo que queremos que tenga nuestra ventana.

CORRER EL PROGRAMA LLAMADO 3.c Este se encuentra en la carpeta de la práctica.

El resultado de correr este ejemplo seria:

Capturando eventos:

Como antes hemos mencionado, el programa trabaja mediante la analogía de eventos, situaciones que se dan y se usan para la interacción entre el usuario y el sistema, cada vez que el usuario genere un evento, es decisión del programador:

Si este evento será reconocido.

Si es reconocido que acciones realizara el programa.

Hay eventos que son casi obligatorios como el evento SDL_QUIT que indica al programa si el usuario ha presionado el botón cerrar de la ventana.

Ahora describamos como detectaremos los eventos:

while (SDL_WaitEvent (&event)){

switch (event.type)

{

case SDL_QUIT: SDL_Quit();

break;

default:


break;

}

}

Esperamos “infinitamente un evento” mediante un while y la sentencia SDL_WaitEvent (&event) una vez sea detectado un evento toda la información de este se guardara en la variable que en

[pic 55][pic 56][pic 57][pic 58][pic 59][pic 60][pic 61][pic 62][pic 63][pic 64][pic 65][pic 66][pic 67][pic 68][pic 69][pic 70][pic 71][pic 72][pic 73][pic 74][pic 75][pic 76][pic 77][pic 78][pic 79][pic 80][pic 81][pic 82][pic 83][pic 84][pic 85][pic 86][pic 87][pic 88]

...

Descargar como (para miembros actualizados) txt (13 Kb) pdf (250 Kb) docx (966 Kb)
Leer 7 páginas más »
Disponible sólo en Clubensayos.com