Remake (parcial) de Fruity Frank... 22 - Rediseñando usando clases (3 - Personajes animados)

(Volver al índice)

Todavía queda una cosa por hacer para que el juego rediseñado usando clases tenga las mismas funcionalidades que la versión anterior: personajes animados.

Habíamos comentado que lo ideal sería que la clase "ElementoGráfico" nos permitiera tanto manejar elementos con una única imagen estática como elementos que tengan varias imágenes, que actuarían como distintos fotogramas para dar una sensación de movimiento más real. Incluso sería deseable que pidiéramos tener distintas secuencias de imágenes según el sentido en que se muestra el personaje (izquierda, derecha, arriba o abajo).

Tampoco es especialmente difícil. Vamos con ello...

    // La secuencia de imagenes, si es animada
    protected Imagen[][] secuencia;
    protected byte fotogramaActual;
    protected byte direccion;
    public const byte ABAJO = 0;
    public const byte ARRIBA = 1;
    public const byte DERECHA = 2;
    public const byte IZQUIERDA = 3;
    public  void Dibujar()
    {
      if (contieneSecuencia)
        secuencia[direccion][fotogramaActual].Dibujar(x, y);
      else if (contieneImagen)
        miImagen.Dibujar(x, y);
      else
        Hardware.ErrorFatal("Se ha intentado dibujar una imagen no cargada!");
    }
    public  ElemGrafico()
    {
      contieneImagen = false;
      contieneSecuencia = false;
      direccion = ABAJO;
      fotogramaActual = 0;
      secuencia = new Imagen[4][];
    }
    public void CargarSecuencia(byte direcc, string[] nombres)
    {
      contieneImagen = true;
      contieneSecuencia = true;
      byte tamanyo = (byte) nombres.Length;
      secuencia[direcc] = new Imagen[tamanyo];
      for (byte i=0; i< nombres.Length; i++) {
        secuencia[direcc][i] = new Imagen(nombres[i]);
        }
    }
    public  void CambiarDireccion(byte nuevaDir)
    {
      if (direccion != nuevaDir)
      {
        direccion = nuevaDir;
        fotogramaActual = 0;
      }
    } 
    public  Personaje(Juego j)  // Constructor
    {    
      miJuego = j;
      ...
      CargarSecuencia( ARRIBA, 
        new string[] {"imagenes/personajea1.png",
          "imagenes/personajea2.png"} );
      CargarSecuencia( DERECHA, 
        new string[] {"imagenes/personajed1.png",
          "imagenes/personajed2.png"} );
      ...    
    }
    public  void MoverDerecha()
    {
      if (miJuego.GetNivelActual().EsPosibleMover( (short) (x+incrX), y) ) 
      {
        CambiarDireccion(DERECHA);
        SiguienteFotograma();
        x += incrX;
        miJuego.GetMarcador().IncrPuntuacion( 
          miJuego.GetNivelActual().PuntosMover( x, y ));
      }
    }

Si quieres ver el fuente completo, todo el fuente del proyecto está en: code.google.com/p/fruityfrank

(Volver al índice)