programaci n de videojuegos n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Programación de Videojuegos PowerPoint Presentation
Download Presentation
Programación de Videojuegos

Loading in 2 Seconds...

play fullscreen
1 / 29

Programación de Videojuegos - PowerPoint PPT Presentation


  • 151 Views
  • Uploaded on

Programación de Videojuegos. Por Gorka Suárez. Apartados del curso. Conceptos teóricos sobre el desarrollo de un videojuego. Introducción a la API multiplataforma SDL. Conceptos teóricos. Organización de un videojuego. El bucle principal. La sección de pintado. La sección de la lógica.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Programación de Videojuegos' - mahlah


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
apartados del curso
Apartados del curso
  • Conceptos teóricos sobre el desarrollo de un videojuego.
  • Introducción a la API multiplataforma SDL.
conceptos te ricos
Conceptos teóricos
  • Organización de un videojuego.
  • El bucle principal.
  • La sección de pintado.
  • La sección de la lógica.
organizaci n de un videojuego
Organización de un videojuego

Inicialización

del programa

Bucle

principal

Finalización

del programa

Cargar datos

Núcleo de datos

del videojuego

Libera los datos

inicializaci n del programa
Inicialización del programa
  • Activar el sistema de video, entrada, sonido, etc...
  • Cargar ficheros de configuración.
  • Carga de las texturas necesarias durante toda la ejecución del programa.
bucle principal
Bucle principal
  • Llamar al pintado de la pantalla.
  • Ejecutar un ciclo de la lógica.

Rutina de pintado

Leer datos

Núcleo de

datos

Leer datos

Rutina de la lógica

Modificar datos

c digo de ejemplo
Código de ejemplo

void BuclePrincipal (tNucleo * Nucleo)

{

Uint32 Intervalo = 0;

Uint32 TiempoAnt = 0;

do{

//Tomamos el tiempo de inicio

TiempoAnt = DarTicks();

//Pintamos la pantalla

PintarPantalla(Nucleo);

//Calculamos cuanto tiempo ha tardado

Intervalo = DarTicks() - TiempoAnt;

//Y ejecutamos la lógica en base al tiempo transcurrido

EjecutarLogica(Nucleo, Intervalo);

}while(Nucleo->Partida.EstadoDelJuego != ESTSAL);

}

la secci n de pintado
La sección de pintado
  • Pintar el fondo.
  • Pintar entidades del juego.
  • Pintar interfaz del juego (HUD).
  • Actualizar la pantalla.
la secci n de la l gica
La sección de la lógica
  • Actualizar la entrada del juego (teclado, ratón, etc...)
  • Interpretar la entrada del juego.
  • Ejecutar la IA de todas las entidades vivas del juego.
introducci n a la sdl
Introducción a la SDL
  • ¿Qué es la SDL?
  • Funciones para la inicialización.
  • ¿Qué son las “SDL_Surface”?
  • Funciones para manejar imágenes.
  • Funciones para la gestión del teclado.
  • Como compilar SDL bajo linux.
qu es la sdl
¿Qué es la SDL?

La SDL es una API multiplataforma, que se puede emplear para el desarrollo de programas que requieran manejo multimedia (gráficos, sonido, entrada, cd-rom, etc...)

Creada por Sam Lantinga, para portar juegos como Civilization Call to Power, de windows a linux. Se puede encontrar en http://www.libsdl.org/

funciones para la inicializaci n
Funcionespara la inicialización
  • SDL_Init
  • SDL_VideoModeOK
  • SDL_SetVideoMode
  • SDL_Quit
sdl init
SDL_Init

int SDL_Init(Uint32 flags);

Inicializa la API SDL. Devuelve -1 en caso de que exista algún error. Su argumento flags sirve para indicar los sistemas que deseamos activar (encadenados con el operador | ):

SDL_INIT_VIDEO = Sistema que controla el tema de los gráficos.

SDL_INIT_AUDIO = Sistema que controla el tema del audio.

SDL_INIT_TIMER = Sistema para el control del tiempo.

SDL_INIT_EVERYTHING = Para inicializarlo todo.

sdl videomodeok
SDL_VideoModeOK

int SDL_VideoModeOK (int width, int height, int bpp, Uint32 flags);

Comprueba si está soportado el modo de video indicado por el usuario, en la tarjeta de video del ordenador. Si no está soportado dicho modo de video, nos devolverá 0, en cualquier otro caso nos devolverá la profundidad máxima soportada por el modo de video indicado. Sus parametros son:

width = Ancho de la resolución de la pantalla.

height = Alto de la resolución de la pantalla.

bpp = Numero de bits de profundidad para el color (8, 16, 24, 32).

flags = Propiedades que va a tener el buffer principal de la pantalla.

sdl setvideomode
SDL_SetVideoMode

SDL_Surface *SDL_SetVideoMode (int width, int height, int bpp, Uint32 flags);

Activa el modo de video que le indiquemos. Nos devolverá NULL en caso de error, o la dirección de memoria donde se encuentra el buffer principal de la pantalla. Los flags que podemos usar son:

+ SDL_SWSURFACE: Que use la memoria RAM normal.

+ SDL_HWSURFACE: Que use la memoria RAM de la tarjeta de video.

+ SDL_DOUBLEBUF: Que use doble buffering.

+ SDL_FULLSCREEN: Que la aplicación sea a pantalla completa.

sdl quit
SDL_Quit

voidSDL_Quit (void);

Finaliza todos los sistemas que se habían activado de la SDL. Se tiene que llamar siempre que se vaya a salir del programa, para desactivar la SDL.

qu son las sdl surface
¿Qué son las “SDL_Surface”?

Son regiones de memoria (buffers), donde se almacenan imágenes. Al cambiar el modo de video, se nos devuelve una región que usará la tarjeta de video, para pintar la pantalla con su información.

¿Qué es el Doble Buffering?

Consiste en una técnica de tener dos buffers para la pantalla, en uno pintamos la escena actual, y del otro la tarjeta de video lee el contenido para pintarlo en la pantalla. Cuando tenemos la escena terminada de pintar, damos el buffer que acabamos de usar a la tarjeta, y tomamos el que acaba de dejar libre, para pintar la nueva escena.

funciones para manejar im genes
Funciones para manejar imágenes
  • SDL_LoadBMP
  • SDL_SetColorKey
  • SDL_FreeSurface
  • SDL_BlitSurface
  • SDL_Flip
sdl loadbmp
SDL_LoadBMP

SDL_Surface *SDL_LoadBMP(const char * ruta);

Carga en una surface, un fichero bmp indicado en el parametro ruta.

sdl setcolorkey
SDL_SetColorKey

int SDL_SetColorKey (SDL_Surface *surface, Uint32 flag, Uint32 key);

Añade o modifica el color clave para la transparencia de la surface que le pasemos como argumento. “flag” suele valer siempre SDL_SRCCOLORKEY, y “key” es el color que va a actuar como color transparente.

sdl freesurface
SDL_FreeSurface

voidSDL_FreeSurface (SDL_Surface *surface);

Libera el espacio ocupado en memoria por la surface que le indiquemos.

sdl blitsurface
SDL_BlitSurface

int SDL_BlitSurface (SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect);

Copia en la región “dstrect”, de la surface “dst”, la región “srcrect”, de la surface “src”. En caso de error devuelve -1.

dst

src

SDL_Rect:

+ x = Coordenada x.

+ y = Coordenada y.

+ w = Ancho del area.

+ h = Alto del area.

dstrect

srcrect

Copiar de src a dst

sdl flip
SDL_Flip

int SDL_Flip (SDL_Surface * buffPantalla);

Intercambia los buffers cuando empleamos la técnica de doble buffering, actualizando así el contenido de la pantalla.

funciones para la entrada
Funciones para la entrada
  • SDL_PumpEvents
  • SDL_GetKeyState
  • SDL_GetMouseState
  • SDL_GetRelativeMouseState
sdl pumpevents
SDL_PumpEvents

voidSDL_PumpEvents (void);

Actualiza el estado completo de la entrada por teclado y ratón.

sdl getkeystate
SDL_GetKeyState

UInt8 *SDL_GetKeyState (int * numKeys);

Nos da un puntero a la región de memoria, donde SDL tiene almacenado el estado de las teclas del teclado. numKeys normalmente valdrá NULL, para que podamos acceder a todas las teclas. Ejemplo:

UInt8 * teclas = SDL_GetKeyState (NULL);

if(teclas[SDLK_ESCAPE] == 1) printf(“Ha pulsado escape...\n”);

sdl getmousestate
SDL_GetMouseState

UInt8SDL_GetMouseState (int * x, int * y);

Da las coordenadas (x, y) actuales del ratón. Devolviendo el estado de los botones del ratón. Que se puede comprobar haciendo lo siguiente:

UInt8 Botones = SDL_GetMouseState (&x, &y);

((Botones & SDL_BUTTON(SDL_BUTTON_?)) == 1) -> Indica si está pulsado un botón o no. Los diferentes botones que hay son: SDL_BUTTON_LEFT, SDL_BUTTON_MIDDLE, SDL_BUTTON_RIGHT, SDL_BUTTON_WHEELUP, SDL_BUTTON_WHEELDOWN.

sdl getrelativemousestate
SDL_GetRelativeMouseState

UInt8SDL_GetRelativeMouseState (int * rx, int * ry);

Da las coordenadas relativas (x, y) actuales del ratón.

como compilar bajo linux
Como compilar bajo linux

Para compilar bajo linux no hace falta realmente mucho trabajo. Tan solo hacernos el fichero makefile, y cuando vayamos a llamar al compilador para generar el ejecutable, enlazando todos los ficheros objeto, hemos de añadir lo siguiente:

`sdl-config --cflags --libs`

Como ejemplo, en el caso de que solo tuvieramos un fichero fuente, el comando quedaría tal que:

gcc `sdl-config --cflags --libs` -o prueba prueba.c