Bienvenidos sean a este post, en este proyecto vamos a aplicar una metodologia similar al proyecto anterior pero con sutiles diferencias.
La primer diferencia va a estar en la forma de almacenar nuestras clases, porque si analizamos el proyecto anterior veremos que todas nuestras clases estan sueltas dentro del mismo generando un gran lio dentro del mismo, para este vamos a crear un paquete donde estaran todas las clases que se encarguen de las especificaciones de nuestros objetos del juego, la metodologia va a ser similar donde tendremos una clase que sera heredada por todas las demas y despues por cada objeto tendremos una clase con las especificaciones de movimiento, actualizacion, dibujo, etc, todo esto se almacenara en un paquete pero que es un paquete?
Podemos definir que un paquete es un grupo de tipos relacionados (clases, interfaces, enumeraciones y anotaciones) proveedores de proteccion de acceso y administracion de espacio de nombres
El Tinchicus
Con esta breve definicion podemos establecer que en este proyecto vamos a organizar un poco mejor nuestras clases gracias a los paquetes, en primera instancia vamos a crear un paquete para las clases que almacenaran las especificaciones de los objetos pero mas adelante crearemos otro paquete para las clases relacionadas al nivel, en la realidad un paquete no deja de ser una carpeta o directorio dentro del directorio o carpeta del proyecto en su seccion de Java, para entender esto un poco mejor vamos a crear el paquete y para ello debemos hacer click con el boton derecho sobre el contenedor de nuestros recursos Java

Deben hacerlo en el contenedor resaltado, no en los otros dos, una vez hecho el click derecho vayan a New -> Package y les aparecera el siguiente cuadro

En este cuadro lo completaremos con el nombre especoj y debera quedarnos con este valor

Presionan Enter y nos debera aparecer la sigueinte carpeta/directorio en nuestro contenedor de Java

Con esto ya tenemos nuestro nuevo «paquete» creado, de ahora en adelante para crear las nuevas clases para las especificaciones de los objetos del juego debemos hacerlo dentro de la misma, el procedimiento es el mismo pero el click con el boton derecho va a ser en este «paquete», las clases que no pertenezcan a este segmento las seguiremos creando como antes, con nuestro paquete creado pasemos a crear la primera clase dentro de este, sus caracteristicas son:
- Nombre: EspecJuegoObjeto
- Tipo: Class
Una vez creada dentro del paquete nos quedara de la siguiente manera

Como pueden ver de ahora en adelante nuestras clases para las especificaciones de los objetos iran en este paquete pero recuerden que solamente seran para las especificaciones el resto iran por fuera, volvamos a la clase que creamos la cual sera el padre de todas las siguientes, para ello vamos a modifcar el codigo generado automaticamente con el siguiente:
package org.example.pepeaventura.especoj;
import android.graphics.PointF;
public abstract class EspecJuegoObjeto {
private String mTag;
private String mBitmapNombre;
private float mVelocidad;
private PointF mTamano;
private String[] mComponentes;
private int mAnimacionFrames;
EspecJuegoObjeto(String tag,
String bitmapNombre,
float velocidad,
PointF tamano,
String[] componentes,
int animacionFrames){
mTag = tag;
mBitmapNombre = bitmapNombre;
mVelocidad = velocidad;
mTamano = tamano;
mComponentes = componentes;
mAnimacionFrames = animacionFrames;
}
public int getNumFrames(){
return mAnimacionFrames;
}
public String getTag(){
return mTag;
}
public String getBitmapNombre(){
return mBitmapNombre;
}
public float getVelocidad(){
return mVelocidad;
}
public PointF getTamano(){
return mTamano;
}
public String[] getComponentes(){
return mComponentes;
}
}
Vamos a ver la primera curiosidad de nuestro codigo:
package org.example.pepeaventura.especoj;
Esta siempre debe ser la primera linea de todas las clases que creemos dentro de este paquete porque va a ser la indicadora de que pertenece a este, al igual como hicimos en el proyecto anterior tambien sera abstracta y publica, luego crearemos las siguientes variables/objetos:
- mTag, es para identificar al objeto
- mBitmapNombre, el nombre del archivo con la imagen
- mVelocidad, almacena la velocidad del objeto
- mTamano, es para almacenar el tamaño del objeto
- mComponentes, almacena los componentes del objeto
- mAnimacionFrames, almacena los frames de la animacion
El siguiente bloque es el constructor que se usara para crear los objetos pero a su vez recibira los valores para asignar a las variables antes declaradas, por ultimo tendremos un segmento con varias funciones que son unicamente getter de las variables antes mencionadas (recuerden que getter es para recuperar el valor en las mismas), con esto tenemos a nuestra clase maestra, vamos a crear la siguiente clase con estas caracteristicas:
- Nombre: EspecFondoCiudad
- Tipo: Class
- Paquete: especoj
Nota: Cuando deba ir la clase dentro de un paquete se los aclaro de esta forma en caso contrario no mencionare el paquete.
Una vez creada la nueva clase vamos a reemplazar el codigo generado por el siguiente:
package org.example.pepeaventura.especoj;
import android.graphics.PointF;
public class EspecFondoCiudad extends EspecJuegoObjeto {
private static final String tag = "fondo";
private static final String bitmapNombre = "ciudad";
private static final int animacionFrames = 1;
private static final float velocidad = 3f;
private static final PointF tamano = new PointF(100,70);
private static final String[] componentes = new String[] {
"ComponenteGraficosFondo",
"ComponenteActualizarFondo"
};
public EspecFondoCiudad(){
super(tag,bitmapNombre,velocidad,
tamano,componentes,animacionFrames);
}
}
En esta clase volvemos a comenzar indicando el paquete, se genera automaticamente en caso de crearlo correctamente, luego extenderemos a nuestra clase maestra, el siguiente paso sera crear las mismas variables que hicimos en la clase anterior pero esta vez las haremos estaticas (static) para que puedan ser accedidas desde cualquier instancia y tambien final porque seran constantes ya que su valor no debe variar en ningun momento, observen que asignamos el valor correspondiente a cada variable, antes de pasar al constructor veamos a componentes:
private static final String[] componentes = new String[] {
"ComponenteGraficosFondo",
"ComponenteActualizarFondo"
};
En este caso sera tambien un array de tipo String y como sucedia en el proyecto anterior tendra el nombre de las clases (o componentes) que utilizara para ser creada y actualizada, y tal como sucedio anteriormente mas adelante las crearemos pero por ahora las tendremos de referencia, el siguiente paso es el constructor de nuestra clase y como podran ver lo unico que hace es enviar todos los datos al constructor de la clase maestra a traves del metodo super, pasemos a la siguiente clase.
La siguiente clase la crearemos con los siguientes datos:
- Nombre: EspecFondoMontana
- Tipo: Class
- Paquete: especoj
Una vez creada la clase reemplazaremos el codigo generado por el siguiente:
package org.example.pepeaventura.especoj;
import android.graphics.PointF;
public class EspecFondoMontana extends EspecJuegoObjeto {
private static final String tag = "fondo";
private static final String bitmapNombre = "montana";
private static final int animacionFrames = 1;
private static final float velocidad = 3f;
private static final PointF tamano = new PointF(100,70);
private static final String[] componentes = new String[] {
"ComponenteGraficosFondo",
"ComponenteActualizarFondo"
};
public EspecFondoMontana(){
super(tag,bitmapNombre,velocidad,
tamano,componentes,animacionFrames);
}
}
El codigo es exactamente igual al anterior pero la diferencia va a estar en el bitmap que vamos a utilizar pero despues el resto es exactamente lo mismo, pasemos a la siguiente clase.
Esta clase debemos generarla con las siguientes caracteristicas:
- Nombre: EspecFondoCueva
- Tipo: Class
- Paquete: especoj
Una vez creada la clase modificaremos el codigo generado por el siguiente:
package org.example.pepeaventura.especoj;
import android.graphics.PointF;
public class EspecFondoCueva extends EspecJuegoObjeto {
private static final String tag = "fondo";
private static final String bitmapNombre = "cueva";
private static final int animacionFrames = 1;
private static final float velocidad = 3f;
private static final PointF tamano = new PointF(100,70);
private static final String[] componentes = new String[] {
"ComponenteGraficosFondo",
"ComponenteActualizarFondo"
};
public EspecFondoCueva(){
super(tag,bitmapNombre,velocidad,
tamano,componentes,animacionFrames);
}
}
La misma situacion al caso anterior porque tenemos exactamente el mismo codigo con los mismos datos y acciones pero la unica diferencia es el nombre del bitmap que ahora sera para la cueva, pasemos a la ultima clase de este post.
La nueva clase debe ser creada con estas caracteristicas:
- Nombre: EspecJugador
- Tipo: Class
- Paquete: especoj
Una vez creada la clase modificaremos el codigo generado automaticamente por el siguiente:
package org.example.pepeaventura.especoj;
import android.graphics.PointF;
public class EspecJugador extends EspecJuegoObjeto {
private static final String tag = "jugador";
private static final String bitmapNombre = "jugador";
private static final int animacionFrames = 5;
private static final float velocidad = 10f;
private static final PointF tamano = new PointF(1f,2f);
private static final String[] componentes = new String[] {
"ComponenteEntradaJugador",
"ComponenteGraficosAnimados",
"ComponenteActualizaJugador"
};
public EspecJugador(){
super(tag,bitmapNombre,velocidad,
tamano,componentes,animacionFrames);
}
}
En este caso tenemos la clase encargada de las especificaciones y componentes del jugador, como pueden ver varian sutilmente los valores pero no las variables, tambien ahora cambiamos el identificador o tag del objeto y sobre todo las clases que seran los componentes de nuestro objeto, por ultimo tambien utilizamos un constructor para enviar estos datos al constructor de la clase maestra, con esto hemos cubierto los objetos del fondo de cada nivel y de nuestro jugador, para el proximo post cubriremos los faltantes.
En resumen, hoy hemos hablado sobre los paquetes en Java, como podemos crearlo y como pueden ayudarnos, tambien hemos creado la clase maestra que se encargara de manejar las especificaciones de nuestros objetos en el juego y hemos agregado algunas de las clases para las especificaciones de nuestros objetos, espero les haya gustado sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.
Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.


Donación
Es para mantenimento del sitio, gracias!
$1.00
