Creación de ventanas por xXZeroXx

{ Posted on sábado, enero 30, 2010 by Albert Soto }
Bienvenidos, en este primer tutorial explicaré como crear una ventana usando el lenguaje C++ en conjunto con las librerias SDL. Si quieres adentrarte en el mundo de la programación con librerias para crear objetos en 2D, te invito a que leas este tutorial.
Se parte del hecho de que se tiene un conocimiento mínimo de el lenguaje C++, se dispone de un editor, un compilador y las librerías necesarias instaladas.




Sin mas comencemos....

Este es el código de nuestra primera aplicación SDL:

#include 
#include 
 
SDL_Surface *screen = NULL;
 
int main(int argc, char* args[]) {
 SDL_Init(SDL_INIT_EVERYTHING);
 
 screen = SDL_SetVideoMode(480, 272, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
 
 SDL_WM_SetCaption("Creacion de una ventana", NULL);
 
 SDL_Delay(5000);
 
 SDL_Flip(screen);
 
 return 0;
}



#include

#include 
#include 
 
Si has estudiado algo de C/C++ enseguida sabras de que se trata.
Los #include  indican qué librerías queremos usar así como la ubicación de estas, los valores debes ajustarlos de manera que apunten a la ubicación correcta, el ejemplo que he puesto sería para llamar a las librerias bajo un sistema GNU/Linux.


SDL_Surface

//Superficies
SDL_Surface *screen = NULL;
Para SDL una superficie es un es un objeto que se puede pintar en pantalla y sobre el cual se pueden pintar otros objetos, es por ello que para poder hacer uso nuestra pantalla necesitamos declarar una superficie de manera que SDL sepa que se puede pintar ahí.
Como se trata de un puntero, lo apuntamos a NULL de manera que prevengamos errores de memoria inesperados.


main

//Funcion main
main (int argc, char *args[]) {
Ahora pasamos a nuestra función main, quizá notes algo raro en ella, argc y args son formas de interactuar con la línea de comandos, mediante ellas se pasan argumentos, ahora mismo no haremos uso de ellas.
argc define el número de argumentos y argv los argumentos que se pueden pasar.


SDL_Init

//Iniciar SDL
SDL_Init(SDL_INIT_EVERYTHING);
Con esta función podemos iniciar SDL, la sintaxis es sencilla:SDL_Init(Uint32 flags);
Entre las flags disponibles tenemos:
  • SDL_INIT_TIMER: Subsistema para manejar tiempo.
  • SDL_INIT_AUDIO: Subsistema para manejar audio.
  • SDL_INIT_VIDEO: Subsistema para manejar vídeo.
  • SDL_INIT_CDROM: Subsistema para manejar la bandeja de CD/DVD.
  • SDL_INIT_JOYSTICK: Subsistema para manejar dispositivos de entrada.
  • SDL_INIT_EVERYTHING: Inicia todo lo anterior.
  • SDL_INIT_NOPARACHUTE: Hace que SDL no atrape señales fatales.
  • SDL_INIT_EVENTTHREAD: Corre el manejador de eventos en un hilo separado.
Dependiendo de lo que quieras hacer necesitarás usar unas u otras, escoge con cuidado ;-)


screen

//Nuestra pantalla
screen = SDL_SetVideoMode(480, 272, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
¿Recuerdas que antes habiamos definido una superficie llamada "screen" y que la habíamos apuntado a "NULL"? Bien, es hora de darle su verdadero valor, la sintaxis es muy sencilla: SDL_SetVideoMode(int ancho, int alto, int bpp, Uint32 Flags)
Entre las flags disponibles tenemos:
  • SDL_SWSURFACE: Crea la superficie en la memoria del sistema (RAM).
  • SDL_HWSURFACE: Crea la superficie en la memoria de video (Tarjeta de video).
  • SDL_ASYNCBLIT: Habilita el uso del volcado asíncrono a la superficie de visualización. Esto provocará usualmente la ralentización del volcado en máquinas de una única CPU, pero puede aumentar la velocidad en sistemas SMP.
  • SDL_ANYFORMAT: Normalmente, si una superficie de video de la profundidad requerida (bpp) no está disponible, SDL emulará una con una superficie en sombras (shadow surface). Pasando SDL_ANYFORMAT se evita esto y causa que SDL use la superficie de vídeo, independiente de la profundidad.
  • SDL_HWPALETTE: Permite el acceso exclusivo a la paleta. Sin este flag no siempre podrás obtener colores utilizando las funciones SDL_SetColors() y SDL_SetPalette().
  • SDL_DOUBLEBUF: Habilita la utilización de búfer doble. Una llamada a SDL_Flip() intercambiará los búferes y actualizará la pantalla. Si la utilización de búfer doble no se encuentra habilitada, entonces SDL_Flip() simplemente realizará un SDL_UpdateRect() en toda la pantalla.
  • SDL_FULLSCREEN: SDL intentará usar el modo a pantalla completa. Esto no siempre es posible.
  • SDL_OPENGL: Crea un contexto de renderizado OpenGL. Se deben haber establecido previamente los atributos OpenGL con SDL_GL_SetAttribute().
  • SDL_OPENGLBLIT: Como el anterior pero permite operaciones de volcado normales.
  • SDL_RESIZABLE: Crea una ventana de tamaño modificable. Si la ventana cambia de tamaño se generará el evento.
  • SDL_VIDEORESIZE: y se puede llamar nuevamente a la función SDL_SetVideMode(), para cambiar al nuevo tamaño.
  • SDL_NOFRAME: Si es posible, SDL crea un ventana sin barra de título u otras decoraciones. El modo FullScreen activa automáticamente este flag.
Igual que con SDL_Init, dependiendo de lo que busques deberás usar unas flags u otras.


...

El resto del programa es fácil de explicar, y no presenta mayores complicaciones, por lo que lo comentaré en un solo bloque.
SDL_WM_SetCaption("Creacion de una ventana", NULL);
Esto lo que hace es ponerle nombre a nuestra ventana, el primer parámetro es el nombre de la ventana y el segundo el nombre de la ventana iconizada.
SDL_Delay(5000);
Esto lo que hace es decirle a SDL que "duerma" una determinada cantidad de tiempo, si no lo pusiéramos, a falta de un bucle infinito, no lograríamos ver nada en nuestra pantalla.
SDL_Flip(screen);
Simplemente "vuelca" los buffers, de manera que podamos ver lo que hemos estado haciendo en pantalla.


Autor:  xXZeroXx
Fuente: Scenebeta.com

No Response to "Creación de ventanas por xXZeroXx"

Publicar un comentario