Asumo que ya tienes conocimientos minimos de C++, si no es asi te recomiendo que busques un tutorial o libro de C++ antes de leer este tutorial.
El codigo fuente se encuentra al final del tutorial
¿Que es lo que vamos a lograr en este tutorial?
Detalles:
- Inicializar graficos para nuestro juego
- Cargar Datos
- Obtener del teclado hacia donde va la vibora
- Actualizar posicion de la vibora
- Dibujar Vibora
Diagrama de flujo: (no es tecnico, solo representa a gran escala como va el juego)
Empezamos: Inicializando Graficas
Lo primero que vamos a crear es una clase para lo grafico, es decir, inicializar la ventana,dibujar, cargar imagenes, etc.
Crearemos 2 archivos, uno llamado graphic.hh (la cabecera) y el otro graphic.cc (implementación), el nombre lo puedes poner como quieras, pero asi le llamaremos nosotros.
---- Archivo graphic.hh ----
Si ya tienes experiencia en C++, este codigo es muy facil de entender, aun asi dare una pequeña explicacion sobre lo que es de SDL.
Cabeceras nuevas
SDL.h: Aqui contiene todos los prototipos de las funciones relacionadas con SDL
SDL_image.h: Esta es una 'extension' que se utiliza para trabajar con imagenes
Variables nuevas
SDL_Surface: esta variable guarda el puntero hacia una superficie SDL.
Una superficie SDL es aquella en la cual podemos dibujar. La propia pantalla se tratara como una superficie SDL.
---- Archivo graphic.cc ----
Vamos a analizar un poco el codigo.
cGraphic::cGraphic: El constructor no tiene gran cosa, simplemente asigna variables para la posterior inicializacion.
cGraphic::init: Aqui inicializamos SDL
Encontramos 2 nuevas funciones: SDL_Init y SDL_SetVideoMode.
SDL_Init se utiliza para inicializar los diferentes componentes de SDL, como es el video, audio, joystick,cdrom, entre otros. Regresa -1 cuando hay algun error.
En este caso solo utilizamos SDL_INIT_VIDEO para inicializar el video.
Sintaxis:
SDL_Init( Uint32 flag );
| Flags mas utilizadas |
|---|
| SDL_INIT_TIMER |
| SDL_INIT_AUDIO |
| SDL_INIT_VIDEO |
| SDL_INIT_EVERYTHING |
SDL_SetVideoMode se utiliza para definir los diferentes parametros que tendra nuestra ventana, por ejemplo el alto, ancho, bits por pixel y otros atributos que se utilizan para dibujar la pantalla, como si se va a realizar la renderizacion por medio de software o hardware, si se va a abrir en pantalla completa. En error regresa NULL, si no regresa el puntero de la superficie de la pantalla(SDL_Surface).
En este caso utilizamos SDL_HWSURFACE, para crear la superficie en la memoria de la tarjeta de video, SDL_DOUBLEBUF, para crear un doble buffer y opcionalmente SDL_FULLSCREEN, que crea la ventana en pantalla completa.
Sintaxis:
SDL_SetVideoMode( int ancho, int alto, int bitsporpixel, Uint32 flags );
| Flags mas utilizadas |
|---|
| SDL_SWSURFACE |
| SDL_HWSURFACE |
| SDL_DOUBLEBUF |
| SDL_FULLSCREEN |
| SDL_OPENGL |
| SDL_NOFRAME |
cGraphic::draw: Esta funcion la utilizamos para actualizar la pantalla.
Aqui tenemos una nueva funcion: SDL_Flip
SDL_Flip en pocas palabras se utiliza para actualizar la pantalla. Toma como parametro la superficie (SDL_Surface*) que obtuvimos con SDL_SetVideoMode. Regresa -1 cuando hay algun error.
Sintaxis:SDL_Flip( SDL_Surface* surface );
cGraphic::loadImage: Esta funcion se encarga de cargar una imagen desde un archivo.
Aqui utilizamos IMG_Load
IMG_Load no es una funcion de SDL, sino de SDL_image, sirve para cargar una imagen desde un archivo y convertirla a una superficie SDL (SDL_Surface). Toma como parametro la ruta del archivo. Regresa NULL cuando no la puede cargar.
Sintaxis:
IMG_Load( const char* filename );cGraphic::clear: Esta funcion la utilizamos para "limpiar" la pantalla, en si lo que hacemos es pintarla de color negro.
Aqui tenemos una nueva funcion: SDL_FillRect
SDL_FillRect es utilizada para "pintar" una region de una superficie con cierto color. Toma como parametro la superficie que se va a pintar, el area que se va a pintar (SDL_Rect) y por ultimo el color. Si el 2do parametro es NULL, se pintara toda la superficie.
Sintaxis:
SDL_FillRect( SDL_Surface* surface, SDL_Rect *dst, Uint32 color );Con esto finalizamos los archivos para manejar las graficas.
En pocas palabras lo que realizamos es:
- Inicializar SDL con SDL_Int
- Crear Superficie de la pantalla con SDL_SetVideoMode
- Limpiar Pantalla con SDL_FillRect
- Actualizar Pantalla con SDL_Flip
Se me olvido mencionar algo, para compilar el programa tienen que agregar las librerias de SDL y SDL_image, ve a las opciones de proyecto (project<project options) y en la pestaña Parameters en el cuadro Linker agrega -lmingw32 -lSDLmain -lSDL_image -lSDL

No hay comentarios:
Publicar un comentario