Planetalia - Cursos

Cursos y Másters

Inicio    Profesores    Aulas    Testimonios    Cursos    Masters    Tecnologías    Cursos Gratuitos    Solicitar Información    Ofertas de Empleo   

Curso - Programación de un Space Invaders en Java

  Página Anterior - Reorganización del código Java Página Actual - 14 - Fotogramas   Página Siguiente - Fotogramas - II
  Índice de cursos Java gratuitos  

Fotogramas

(c) Alexander Hristov

Ahora que tenemos un montón de bichos moviéndose por todas partes, vamos a dotarles de animación. En este tipo de videojuegos, así como en muchos otros como por ejemplo de estrategia, de aventura o de rol con perspectiva isométrica, de plataforma, etc. la animación de los monigotes suele ser sinónimo de fotogramas : la imagen del actor va recorriendo una serie sucesiva de imagenes llamadas "fotogramas". Cuantos más fotogramas hay, más suave es la animación del propio bicho

En este caso vamos a utilizar los siguientes dos fotogramas, llamados "bicho0.gif" y "bicho1.gif":

Monstruo del curso de java Monstruo del curso de java

Dado que los fotogramas es algo que podemos querer que tenga cualquier objeto de nuestro juego - disparos, bonus, monstruos, etc, añadiremos esa funcionalidad a la clase Actor en lugar de a la clase Monster. La propiedad spriteName desaparece y es sustituida por la propiedad spriteNames, que es una matriz de nombres de gráficos en lugar de un único gráfico. Adicionalmente, el método act() se encarga de incrementar el número de fotograma cada vez:


1     /**
2      * Curso B?sico de desarrollo de Juegos en Java - Invaders
3      * 
4      * (c) 2004 Planetalia S.L. - Todos los derechos reservados. Prohibida su reproducci?n
5      * 
6      * http://www.planetalia.com
7      * 
8      */
9     package version14;
10    
11    import java.awt.Graphics2D;
12    import java.awt.image.BufferedImage;
13    
14    public class Actor {
15      protected int x,y;
16      protected int width, height;
17      protected String[] spriteNames;
18      protected int currentFrame;
19      protected Stage stage;
20      protected SpriteCache spriteCache;
21      
22      public Actor(Stage stage) {
23        this.stage = stage;
24        spriteCache = stage.getSpriteCache();
25        currentFrame = 0;
26      }
27      
28 public void paint(Graphics2D g){ 29 g.drawImage( spriteCache.getSprite(spriteNames[currentFrame]), x,y, stage ); 30 }
31 32 public int getX() { return x; } 33 public void setX(int i) { x = i; } 34 35 public int getY() { return y; } 36 public void setY(int i) { y = i; } 37 38 public void setSpriteNames(String[] names) { 39 spriteNames = names; 40 height = 0; 41 width = 0; 42 for (int i = 0; i < names.length; i++ ) { 43 BufferedImage image = spriteCache.getSprite(spriteNames[i]); 44 height = Math.max(height,image.getHeight()); 45 width = Math.max(width,image.getWidth()); 46 } 47 } 48 49 public int getHeight() { return height; } 50 public int getWidth() { return width; } 51 public void setHeight(int i) {height = i; } 52 public void setWidth(int i) { width = i; } 53
54 public void act() { 55 currentFrame = (currentFrame + 1) % spriteNames.length; 56 }
57 } 58

Es interesante que nos fijemos en la forma en que se aumenta el contador de fotogramas : se utiliza un % spriteNames.length para asegurarse que su valor siempre esté entre 0 y el número de fotogramas - 1

Puesto que ahora tenemos funcionalidad en el método act() de Actor, los hijos no pueden sobreescribir ese método sin más, sino que deben acordarse de llamar al método ancestro antes de comenzar a realizar sus propias acciones particulares. Esto hace que la clase Monster quede modificada de la siguiente forma:/


1     /**
2      * Curso B?sico de desarrollo de Juegos en Java - Invaders
3      * 
4      * (c) 2004 Planetalia S.L. - Todos los derechos reservados. Prohibida su reproducci?n
5      * 
6      * http://www.planetalia.com
7      * 
8      */
9     package version14;
10    
11    public class Monster extends Actor {
12      protected int vx;
13      
14      public Monster(Stage stage) {
15        super(stage);
16        setSpriteNames( new String[] {"bicho0.gif","bicho1.gif"});
17      }
18      
19      public void act() {
20 super.act();
21 x+=vx; 22 if (x < 0 || x > Stage.WIDTH) 23 vx = -vx; 24 } 25 26 public int getVx() { return vx; } 27 public void setVx(int i) {vx = i; }} 28


¿Quieres ser notificado cuando salan nuevos tutoriales y cursos?. Pulsa aquí


Lista de archivos Java del programa en este paso

Actor.java Invaders.java Monster.java SpriteCache.java
Stage.java      

Lista de recursos

bicho.gif bicho0.gif bicho1.gif bicho2.gif
bombD.gif bombDL.gif bombDR.gif bombL.gif
bombR.gif bombU.gif bombUL.gif bombUR.gif
disparo.gif disparo0.gif disparo1.gif disparo2.gif
explosion.wav misil.gif missile.wav musica.wav
nave.gif oceano.gif photon.wav test.gif
Thumbs.db      

  Página Anterior - Reorganización del código Java Página Actual - 14 - Fotogramas   Página Siguiente - Fotogramas - II
  Índice de cursos Java gratuitos  

(c) 2004 Planetalia S.L. Todos los derechos reservados. Prohibida su reproducción