10.07.2015 Views

[ebook]Programacion de videojuegos con SDL

[ebook]Programacion de videojuegos con SDL

[ebook]Programacion de videojuegos con SDL

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

P R O G R A M A C I Ó N D E V I D E O J U E G O S C O N S D Lprogramación orientada a objetos para que te vayas familiarizando. Observarás que esmucho más fácil reutilizar esta librería en tu propio código gracias a la POO. Consulta elapéndice B <strong>de</strong>dicado a C++ si no estás familiarizado <strong>con</strong> esto <strong>de</strong> los objetos y las clases.Prometo no utilizar más POO en el resto <strong>de</strong>l libro (más <strong>de</strong> un lector lo lamentará, peroprefiero hacer el libro lo más accesible posible).Dotaremos a nuestra librería <strong>con</strong> capacidad para movimiento <strong>de</strong> sprites, animación (unsoporte básico) y <strong>de</strong>tección <strong>de</strong> colisiones.En el diagrama <strong>de</strong> clases <strong>de</strong> nuestra librería (Figura 5.4.) observamos que hay sólodos clases. Si no sabes lo que es un diagrama <strong>de</strong> clases, te bastará saber que cada cajarepresenta a una clase, y que la parte superior <strong>de</strong> la caja <strong>de</strong>scribe las variable miembro<strong>de</strong> la clase mientras que la parte inferior <strong>de</strong>scribe los métodos.La clase CFrame será la encargada <strong>de</strong> <strong>con</strong>tener un gráfico (superficie) in<strong>de</strong>pendiente.Tiene un sólo miembro <strong>de</strong> clase, img, que será la encargada <strong>de</strong> almacenar la superficie,y dos métodos, load para cargar el gráfico y unload para liberar los recursos <strong>de</strong> lasuperficie. La razón por la que hemos utilizado dos clases es porque un mismo gráficopodría formar parte <strong>de</strong> dos sprites diferentes (imagina dos explosiones distintas quecomparten los mismos fotogramas).Figura 5.4. Diagrama <strong>de</strong> clases UML <strong>de</strong> la librería <strong>de</strong> sprites.La clase CSprite representa a un sprite. Observa que tiene dos <strong>con</strong>structores (unejemplo <strong>de</strong>l polimorfismo en acción). Al crear un objeto <strong>de</strong> tipo CSprite po<strong>de</strong>mos indicarel número <strong>de</strong> frames (fotogramas) que tendrá el sprite. Si creamos el objeto sin pasarningún parámetro, el sprite tendrá un sólo frame. Añadiendo múltiples frames, podremoscrear sprites animados. Una vez que ya no necesitamos nuestro sprite, po<strong>de</strong>mos llamaral método finalize() que se encarga <strong>de</strong> llamar al método unload() <strong>de</strong> cada uno <strong>de</strong>los frames que forman parte <strong>de</strong>l sprite, es <strong>de</strong>cir, se encarga <strong>de</strong> liberar los recursosgráficos (superficies). La forma <strong>de</strong> añadir frames a nuestro sprite es mediante la funciónaddframe(). Sólo tenemos que pasar como parametro el frame que queremos añadir ala animación <strong>de</strong>l sprite. Con el método selframe() po<strong>de</strong>mos seleccionar el frameactual, es <strong>de</strong>cir, el que será dibujado. Para crear la sensación <strong>de</strong> movimiento interno,tendremos que ir dibujando nuestro sprite e ir cambiando el frame seleccionado cada vez.Para realizar la animación <strong>de</strong>s<strong>de</strong> nuestro programa, hemos <strong>de</strong> <strong>con</strong>ocer el número <strong>de</strong>frames que tiene el sprite. El método frames() nos informa sobre cuantos frames tieneel sprite actualmente.Profundicemos en los métodos que nos permiten mover el sprite por la pantalla. Conlos métodos setx() y sety() especificamos la posición <strong>de</strong>l sprite en la pantalla. Conlos métodos addx() y addy() po<strong>de</strong>mos indicar un <strong>de</strong>splazamiento <strong>de</strong>l sprite en pantallatomando como punto <strong>de</strong> referencia la situación actual, es <strong>de</strong>cir, addx(5) moverá el78

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!