Tutorial Juego Completo
Tutorial Juego Completo
Hola a todos, como prometí, he finalmente comenzó a publicar una serie de tutoriales del
juego completo, tratando de cubrir todos los temas de la creación de un juego completo
utilizando AndEngine. En el último artículo, usted será capaz de descargar el código fuente
del proyecto juego completo.
En este artículo, voy a demostrar cómo crear un juego fresco estilo de salto de plataformas
en 2D. En este juego el jugador tendrá que saltar entre los azulejos para recoger las
monedas, evita los obstáculos y tratar de no morir
Creación de un menú.
Jugador saltando Manipulación, recoger monedas, juegos sobre eventos (die etc)
En los siguientes tutoriales, voy a suponer que usted ya conoce los conceptos básicos de
AndEngine (Si no por favor diríjase a mis artículos anteriores, que abarca los conceptos
más importantes) También supongo que usted ya ha descargado e instalado AndEngine y
Física Box2D extensión, si no comprobar este tutorial sobre cómo motor de instalación !
. 1 Primer paso:
Crear un nuevo proyecto android en su explorador de proyectos eclipse, y crear una nueva
clase en blanco para nuestra actividad de juego, al igual que en la imagen de abajo:
Al hacer todos los pasos mencionados, estamos listos para empezar a programar nuestro
juego, si usted está listo, por favor vaya a segundo artículo:
En el artículo anterior, hemos descargado con éxito el motor, y la extensión física, también
hemos creado nuestro proyecto de juego, vinculamos las fuentes del motor, y creamos una
nueva clase en blanco para nuestra actividad, en este artículo vamos a la configuración de
esta actividad.
Vamos a utilizar una sola actividad, y varias escenas, aquí `s pequeño diagrama que
muestra las escenas:
Después de abrir nuestro juego, el siguiente orden se utilizará:
Así como usted puede ver, es bastante fácil, nada demasiado complicado. Tenga en cuenta
que es mi manera de manejarlo. Es hasta usted para modificarlo para adaptarlo a sus
necesidades, dependiendo de su complejidad juego para la mayoría de juegos que debería
ser lo suficientemente bueno.
. 1 Configuración de Actividad del juego:
/ **
* @ Author Mateusz Mysliwiec
* @ Author www.matim-dev.com
* @ Version 1.0
* /
public class GameActivity extiende BaseGameActivity
{
EngineOptions públicas onCreateEngineOptions ()
{
devolver null;
}
}
}
El siguiente paso es crear nuestro motor, ya que queremos hacer nuestro juego funcione a
velocidades similares en diversos dispositivos, utilizaremos el LimitedFPSEngine clase
para hacerlo. Esto es subclase del motor predeterminado, intentará alcanzar un determinado
número de actualizaciones por segundo. Para hacerlo, hemos anular onCreateEngine y
devolver nuestro motor:
@ Override
onCreateEngine Motor pública (EngineOptions pEngineOptions)
{
return new LimitedFPSEngine (pEngineOptions, 60);
}
Hemos creado una nueva cámara, de tamaño 800 x 480 píxeles (que depende de usted para
decidir qué resolución de pantalla que se va a hacer frente, es actualmente más utilizado
uno) al lado creamos nuestras opciones de motor, estableciendo el parámetro de pantalla
completa en true, usando orientación fija del paisaje, y la política de resolución de la
relación (si el juego va a ser utilizado en una resolución de pantalla diferente del motor
cambiará el tamaño de nuestro juego, mientras se mantiene la proporción adecuada)
también fijamos las necesidades de la música y el sonido de verdad, así lo haremos ser
capaz de utilizar algo de audio para nuestro juego.
Tenemos que abrir y editar archivos de manifiesto de Android, para definir algunos
permisos y nuestra actividad, así es como se ve mi manifiesto:
<Xmlns manifiestos: android = "http: / / schemas.android.com / apk / res
/ android"
paquete = "com.matimdev"
android: versionCode = "1"
android: VersionName = "1.0">
<Aplicación
<Actividad
android: name = ". GameActivity"
android: label = "@ string / nombre_apl"
android:configChanges = " keyboard|keyboardHidden|
orientation|screenLayout|uiMode|screenSize|smallestScreenSize|mcc|mnc "
android: screenOrientation = "paisaje">
<Intención de filtro>
<Acción android: name = "android.intent.action.MAIN" />
<Categoría android: name =
"android.intent.category.LAUNCHER" />
</ Intención de filtro>
</ Actividad>
</ Application>
</ Manifest>
Estamos permitiendo que los permisos más importantes, como el acceso a Internet. (Se
utiliza si desea incluir publicidad en su aplicación, etc) también proporcionaron
información sobre nuestra actividad. También incluimos configChanges propiedad.
Esta clase será responsable de la carga / descarga de los recursos del juego (de arte, fuentes,
archivos de audio) también proporcionará las referencias a los objetos necesarios más
comúnmente (cámara, marco, motor, VertexBufferObjectManager) esta clase utilizará
titular singleton, lo que significa que le podrán acceder a esta clase de nivel mundial.
/ **
* @ Author Mateusz Mysliwiec
* @ Author www.matim-dev.com
* @ Version 1.0
* /
public class ResourcesManager
{
/ / ---------------------------------------------
/ / variables
/ / ---------------------------------------------
/ / ---------------------------------------------
/ / TEXTURAS Y Regiones TEXTURA
/ / ---------------------------------------------
/ / ---------------------------------------------
/ / Clase de lógica
/ / ---------------------------------------------
/ **
* @ Param motor
* @ Param actividad
* @ Param cámara
* @ Param vbom
* <br>
* Utilizamos este método al inicio del juego de la carga, para
preparar Gerente de Recursos correctamente,
* Ajuste de todos los parámetros necesarios, por lo que podemos
último acceso desde diferentes clases (por ejemplo, escenas)
* /
public static void prepareManager (motor Engine, la actividad
GameActivity, cámara de la cámara, VertexBufferObjectManager vbom)
{
getInstance () = motor motor.;
. getInstance () Actividad = actividad;
getInstance () = cámara cámara.;
getInstance () vbom = vbom.;
}
/ / ---------------------------------------------
/ / getters y setters
/ / ---------------------------------------------
Hay métodos separat responsables de gráficos de carga, fuentes y sonidos, también métodos
responsables para la descarga de texturas y cargarlos de nuevo (necesario para fines de
ahorro de memoria, mientras que el cambio entre menú y escenas de caza) También existe
un método prepareManager, que asigna los parámetros necesarios para nuestra gerente,
tenemos que usar este método al inicializar nuestro juego.
. 1 Inicializando nuestra ResourcesManager:
Hecho, nuestro gerente de recursos está listo para ser utilizado, ahora se refieren al artículo
siguiente. La introducción de la gestión de la escena, utilizando la clase SceneManager.
Uno de los temas más importantes en este tutorial es la gestión de escena. Por esta razón,
vamos a crear dos nuevas clases, breve descripción aquí `sa de ellos:
BaseScene - esta clase será una representación básica de cada escena creada en
nuestro juego, que es una clase abstracta, que se encargará de la lógica escena
básica.
SceneManager - como se puede concluir, esta clase proporcionará formas de
gestionar nuestras escenas, cambiar entre ellos, hacer el seguimiento de la escena
actual, el tipo de escena, etc
. 1 clase BaseScene:
/ **
* @ Author Mateusz Mysliwiec
* @ Author www.matim-dev.com
* @ Version 1.0
* /
public abstract class BaseScene extiende Escena
{
/ / ---------------------------------------------
/ / variables
/ / ---------------------------------------------
/ / ---------------------------------------------
/ / CONSTRUCTOR
/ / ---------------------------------------------
BaseScene pública ()
{
este resourcesManager = ResourcesManager getInstance ()..;
. este motor = resourcesManager motor.;
esta actividad = resourcesManager actividad..;
. este vbom = resourcesManager vbom.;
. esta cámara = resourcesManager cámara.;
createScene ();
}
/ / ---------------------------------------------
/ / ABSTRACCIÓN
/ / ---------------------------------------------
Como se mencionó anteriormente, esta será nuestra clase "núcleo" de cada escena creada.
Se puede utilizar como una extensión, proporcionando la lógica escena básica, usando
métodos abstractos. También contará con los objetos más utilizados tomados de creado
anteriormente ResourcesManager . Hay getSceneType, volviendo SceneType - será una
enumeración dentro de la clase SceneManager, ignore el error y pasar al siguiente paso
siguiente para crear el gestor de escena.
. 2 clase SceneManager:
Será una clase muy importante en nuestro juego, responsable de cambiar de una escena y
hacer el seguimiento de la escena que se muestra actualmente. Usaremos SINGLETON
TITULAR, lo que significa que será capaz de utilizar este pesebre desde el nivel global.
También contará con una enumeración, que contiene nuestros tipos de escenas. También
vamos a crear 4 objetos BaseScene, para las escenas (contra salpicaduras, de carga, de
menú y de escenas de caza)
/ **
* @ Author Mateusz Mysliwiec
* @ Author www.matim-dev.com
* @ Version 1.0
* /
public class SceneManager
{
/ / ---------------------------------------------
/ / ESCENAS
/ / ---------------------------------------------
/ / ---------------------------------------------
/ / variables
/ / ---------------------------------------------
/ / ---------------------------------------------
/ / Clase de lógica
/ / ---------------------------------------------
/ / ---------------------------------------------
/ / getters y setters
/ / ---------------------------------------------
También hay métodos get a mano para recibir el tipo de escena actual y referencias de la
escena actual, lo que podría ser útil en sus etapas posteriores de desarrollo de juegos. No es
el método más importante setScene (sceneType SceneType), que cuida sobre la
visualización de otra escena y hacer el seguimiento de la misma, mediante el
almacenamiento de las referencias de la escena que se muestra y su tipo.
That `s todo - nuestro sistema de manejo de la escena está lista para ser utilizada, bastante
simple ¿no? Ahora pasamos a la siguiente etapa, la creación de nuestra primera escena, que
es una pantalla de bienvenida. Ir al siguiente artículo!
De acuerdo, hemos cubierto todas las clases de "gestión", por lo que finalmente podemos
pasar a la siguiente etapa, que está creando nuestro propio juego, mediante la creación de
escenas, obviamente, de lo que se podría ver en nuestro diagrama de clases publicado en las
partes anteriores de este artículo, la primera escena será nuestra pantalla de inicio, vamos a
mostrar un poco de placa durante la carga de los recursos del menú. Significa, jugador no se
verá obligado a ver la pantalla en negro mientras que los recursos de carga, primero cargar
sólo los recursos de la pantalla de bienvenida y luego mostrar la escena splash y finalmente
cargar diferentes recursos, bastante simple.
. 1 Cargando recursos salpicaduras:
Vamos a tomar el cuidado de los recursos de carga para nuestra pantalla de inicio en primer
lugar. En este ejemplo, vamos a utilizar una simple insignia para nuestra pantalla de
bienvenida (en este caso mi propia insignia, jeje)
poner su archivo gráfico splash dentro activos / gfx / carpeta.
llamar a este archivo splash.png
abrir el ResourcesManager clase, y permite cargar este gráfico. En primer lugar
crear campos para la región de textura y salpicaduras textura.
Hecho, hemos preparado el código responsable de los recursos contra salpicaduras de carga
/ descarga, ahora vamos a pasar a la creación de la escena infantil, más abajo.
@ Override
onBackKeyPressed public void ()
{
@ Override
pública SceneType getSceneType ()
{
@ Override
public void disposeScene ()
{
}
}
Bueno, que tenemos al alcance y fácil de entender los métodos, vamos a empezar con el
llenado getSceneType (), devuelva el tipo de escena (del SceneManager enum `s)
@ Override
pública SceneType getSceneType ()
{
volver SceneType SCENE_SPLASH.;
}
Ahora vamos a manejar la creación de escena, sólo necesitaremos un Sprite para nuestra
presentación.
@ Override
public void disposeScene ()
{
. salpicar detachSelf ();
salpicar dispose ().;
. este detachSelf ();
. este dispose ();
}
Este dispondrá del sprite splash, y separarla de la escena. Bien, nuestra escena splash se
hace, ahora solo tenemos que inicializarlo dentro de nuestra actividad, más abajo.
Lo que hace:
Se mostrará la pantalla de bienvenida hasta las diferentes tareas se han ejecutado (Carga de
los recursos del menú, el menú de escena y la puesta en escena a la escena del menú.)
En este paso, después de ejecutar nuestro juego, usted debería ser capaz de ver la escena
splash que se muestra (todo el tiempo, por ahora) En el próximo artículo, cubriremos la
creación de la escena del menú y cambiar a él después de cargarlo. Consulte la siguiente
parte para continuar.
Blog
Tutoriales
Dispositivos Biblioteca
Hoja informativa
Descargar
Contacto
Mi trabajo
Acerca de mí
intentar
{
.. este menuTextureAtlas construir (nueva
BlackPawnTextureAtlasBuilder <IBitmapTextureAtlasSource,
BitmapTextureAtlas> (0, 1, 0));
.. este menuTextureAtlas load ();
}
catch (e TextureAtlasBuilderException final)
{
. De depuración e (e);
}
Estamos creando un mapa de bits edificables atlas textura así que no tenemos que
especificar posiciones de gráficos específicas del interior de la textura. De acuerdo, se hace
nuestro código activos menú de carga.
. 2 Creación de escena del menú:
Crear una nueva clase Java llamada MainMenuScene como una extensión utilizar la clase
creada anteriormente llamado BaseScene. Al igual que antes, usted se verá obligado por
eclipsar a añadir los métodos no implementados.
@ Override
pública SceneType getSceneType ()
{
volver SceneType SCENE_MENU.;
}
vamos a crear un fondo para nuestra escena menú, cree el nuevo método
createBackground ()
Lo que hace: Crea un nuevo elemento sprite en el centro de la pantalla, para nuestro fondo,
con textura de fondo de la región, también capacitamos tramado para mejorar la calidad del
degradado.
@ Override
public void createScene ()
{
createBackground ();
}
Ahora vamos a crear nuestros botones del menú, para este fin se hará uso de la clase
incorporada AndEngine MenuScene, aquí `s el código:
setChildScene (menuChildScene);
}
Estamos creando dos elementos de menú de sprites, para nuestros dos botones (Play &
opciones) también utilizamos decorador elemento de menú escala, lo que hace que nuestros
elementos de menú animados (que se están ampliando, mientras tocaba) es un efecto muy
fácil, usted puede crear fácilmente su propio, es más que suficiente para los fines de este
tutorial sin embargo. También estamos añadiendo los elementos de menú a la escena del
menú, y el posicionamiento de los elementos del menú, a ve bien con nuestro fondo.
Ahora basta con ejecutar este método dentro de () método createScene.
@ Override
public void createScene ()
{
createBackground ();
createMenuChildScene ();
}
Eclipse dará un error sobre la configuración de menú del botón oyente, lo vamos a utilizar,
para ejecutar ciertas acciones después de pulsar los botones del menú. Para hacerlo, en
primer lugar implementar la clase IOnMenuItemClickListener. Eclipse le pedirá que
agregue método sin aplicarse.
Déjalo así por ahora, vamos a crear acciones de los botones de menú más adelante.
Nuestra escena menú ha sido creado, ahora hay que inicializarlo dentro de nuestro
SceneManager y crear código responsable de la carga de sus recursos, la inicialización de la
escena del menú y cambiar a la escena del menú después de cargar con éxito los recursos
de menú.
Se carga los recursos de menú, inicializar escena del menú, cambiar a la escena del menú, y
al final, a disponer escena pantalla de bienvenida, porque ya no es necesario.
De esta manera la escena pantalla de bienvenida creada previamente, se debe mostrar hasta
que los recursos de menú se cargan, se inicializa escena menú y luego se muestran.
Después de ejecutar su proyecto, usted debería ser capaz de ver la pantalla pantalla de
inicio mientras se carga el menú, y después de eso, la escena del menú se debe mostrar:
Ese `s de todo, ahora podemos decir que nuestra escena menú está hecho, más tarde sólo
tenemos que vincular las acciones de nuestros botones de menú para ejecutar acciones tales
como la visualización de la escena del juego o las opciones de sub escena menú.
Advertencia: Si usted está leyendo este artículo, y que estaba leyendo y el uso de artículos
anteriores antes de la fecha de hoy (21/01/2012) Tenga en cuenta el hecho de que los artículos 4,
5 y 6 se han actualizado y RE-factorizada (por favor, lea de nuevo y actualizar su código, de lo
contrario tendrá muchos problemas / errores) Esos cambios eran necesarios!
Tenemos que reemplazar el método OnDestroy, para asegurarse de que nuestra actividad se mató
después de abandonar el juego, ya que algunos dispositivos tienden a mantener viva su actividad
incluso después de salir de ella, lo que lleva a un comportamiento extraño. Para asegurarse de que
van a matar, anular OnDestroy dentro de su actividad y ponerse System.exit (0);
@ Override
protected void OnDestroy ()
{
. súper OnDestroy ();
. Sistema exit (0);
}
Como podrá darse cuenta, mientras que la creación de escenas, tuvimos que añadir un método sin
aplicarse llamado onBackKeyPressed () - ahora nosotros nos encargaremos de ejecutarlo. Dentro
de su actividad, reemplace el método onKeyDown.
@ Override
onKeyDown public boolean (int keyCode, evento KeyEvent)
{
if (KEYCODE_BACK keyCode == KeyEvent.)
{
.. SceneManager getInstance () getCurrentScene ()
onBackKeyPressed ().;
}
return false;
}
Advertencia: Si usted está leyendo este artículo, y que estaba leyendo y el uso de artículos
anteriores antes de la fecha de hoy (21/01/2012) Tenga en cuenta el hecho de que los
artículos 4, 5 y 6 se han actualizado y RE-factorizada (por favor, lea de nuevo y actualizar
su código, de lo contrario usted animará muchos problemas / errores) Esos cambios eran
necesarios!
. 1 Cargando escena:
Va a ser una escena simple blanco, con sólo un objeto - el texto que dice "cargando ..." -
vamos a mostrar este escena mientras pre-cargar la escena del juego y de sus recursos. Por
favor, consulte el diagrama de clases del artículo número 2 (al tiempo que muestra la
escena de carga, texturas menú serán descargados, se cargan los recursos del juego, y se
inicializará la escena del juego) Esta escena también se utilizará para volver a la escena
desde el menú escena del juego (a la inversa, la escena del juego de descarga y sus texturas
y texturas del menú de carga) Al usar este enfoque simple, vamos a minimizar el uso de
memoria.
vamos primero a crear una clase de escena carga, llamémosle LoadingScene. Como
anteriormente, utilice nuestra clase BaseScene como una extensión y agregar
métodos no implementados. Permite también crear un fondo blanco para nuestra
escena.
@ Override
public void onBackKeyPressed ()
{
volver;
}
@ Override
pública SceneType getSceneType ()
{
volver SceneType SCENE_LOADING.;
}
@ Override
public void disposeScene ()
{
}
}
Como dije al principio, vamos a necesitar el texto que dice "cargando ..." para hacer esto,
primero tiene que cargar algunos de fuente para crear el texto. Su hasta usted qué tipo de
fuente que se utilice.
Estoy cargando un tipo de letra llamado font.ttf Del activos / font / carpeta.
Ahora vamos a ejecutar nuestro método responsable de las fuentes de carga dentro
de las loadMenuResources (método), por lo que ahora debería tener este aspecto:
El código responsable de la fuente de carga está listo, vamos a volver a nuestra clase de
escena cargar, y crear un objeto de texto y colocarlo en el centro de la pantalla.
@ Override
public void createScene ()
{
setBackground (nuevo fondo (color blanco).);
attachChild (. nuevo texto (400, 240, resourcesManager fuente,
"Cargando ...", vbom));
}
Y finalmente aquí estamos, en este artículo, vamos a crear parte más importante de nuestra
aplicación, que es la escena del juego-juego.
crear una nueva clase, llamada GameScene y use nuestro BaseScene como una
extensión.
@ Override
public void onBackKeyPressed ()
{
@ Override
pública SceneType getSceneType ()
{
volver SceneType SCENE_GAME.;
}
@ Override
public void disposeScene ()
{
}
}
. 1 Creación de fondo:
En este ejemplo, vamos a usar algo simple como un fondo, vamos a utilizar el color simple,
también puede utilizar su propia imagen o crear fondos más avanzadas, como la paralaje etc
void createBackground privado ()
{
setBackground (nuevo Fondo (Color azul).);
}
. 2 Creación de HUD:
crear nuevo campo para el texto puntuación, e inicializar dentro método createHUD:
. 3 Creación de la física:
Vamos a necesitar la física en nuestro juego, así que vamos a crearlo.
crear nuevo campo para nuestra PhysicsWorld y crear método para inicializarlo.
@ Override
public void createScene ()
{
createBackground ();
createHUD ();
createPhysics ();
}
Ese `s todo en este artículo, por ahora, es básico escena del juego puesta en marcha, en los
próximos artículos vamos a añadir las piezas más grandes, como controlador, jugador,
cargador de nivel y el constructor, la lógica de nivel. Compruebe próximo artículo, de
configurar la escena del juego de carga y el proceso de visualización.
Parte 10 Viendo escena carga mientras escena del juego de carga.:
En el artículo anterior, hemos preparado básico juego escena del juego de preparación.
Ahora vamos a manejar la visualización de la escena de carga después de pulsar el botón de
reproducción s menú `. Como usted debe recordar de la descripción diagrama de clases,
vamos a mostrar la escena de carga mientras que los recursos de juego de pre-carga,
descarga texturas del menú y la inicialización de la escena del juego (y también mientras se
mueve hacia atrás de juego a escena menú)
Abrir nuestra clase MenuScene para ejecutar este método después de pulsar el botón
de reproducción.
Si has seguido mis tutoriales y códigos con cuidado, usted debería ser capaz de cargar
escena del juego después de pulsar el botón de reproducción, y mientras escena del juego
de carga, escena de carga se debe mostrar.
Maneja mostrando escena de carga durante la ejecución de código de las texturas del juego
descarga, carga de nuevo el menú textura y también ejecutamos disposeScene (); Método
de nuestra escena del juego, vamos a poner ahí el código responsable de la limpieza de la
escena del juego, por ahora poner esto dentro disposeScene () en nuestra clase GameScene.
@ Override
public void disposeScene ()
{
. cámara setHUD (null);
. setCenter cámara (400, 240);
/ / Código TODO responsable de deshacerse escena
/ / Eliminación de todos los objetos de la escena del juego.
}
Por ahora sólo cámara clara del `s del HUD y la cámara definido` s posición central en su
valor predeterminado, más adelante vamos a añadir código responsable de desmontar /
desechar todas las entidades y la destrucción de los objetos físicos.
@ Override
public void onBackKeyPressed ()
{
. SceneManager getInstance () loadMenuScene (motor).;
}
Ese `s todo en este artículo, haciendo todo incluido en todos los artículos hasta ahora, usted
debería ser capaz de cambiar entre menú y escenas de juego libre. Cargando escena se
muestra sólo para muy corto período de tiempo, ya que de momento no usamos muchos
recursos (gráficos, etc), pero más tarde él rudo lleva poco más de tiempo.
Ahora nos centraremos en algunos aspectos del juego-juego, el nombre de nuestro juego es
"el juego del puente" - tendremos que controlar personaje 2d, saltando entre plataformas y
recoger monedas. En primer lugar, en este juego no voy a crear bellos gráficos debido a
que:
. 1 tipos de plataformas:
. 2 objeto de la moneda:
Jugador será capaz de recoger las monedas, ganando puntuación. Usaremos gráfico
utilizado anteriormente.
. 3 Cargando gráficos para plataformas y moneda:
Abrir nuestra clase ResourcesManager, y crear campos para las regiones de textura
para nuestros gráficos, y de nueva textura:
/ / Textura Juego
BuildableBitmapTextureAtlas públicas gameTextureAtlas;
permite inicializar nuestras nuevas texturas y juegos de carga recursos del juego
(plataformas y monedas) en el interior loadGameGraphics creados anteriormente
(método).
platform1_region = BitmapTextureAtlasTextureRegionFactory
createFromAsset (gameTextureAtlas, la actividad, "platform1.png").;
platform2_region = BitmapTextureAtlasTextureRegionFactory
createFromAsset (gameTextureAtlas, la actividad, "platform2.png").;
platform3_region = BitmapTextureAtlasTextureRegionFactory
createFromAsset (gameTextureAtlas, la actividad, "platform3.png").;
coin_region = BitmapTextureAtlasTextureRegionFactory createFromAsset
(gameTextureAtlas, la actividad, "coin.png").;
intentar
{
.. este gameTextureAtlas construcción (nueva
BlackPawnTextureAtlasBuilder <IBitmapTextureAtlasSource,
BitmapTextureAtlas> (0, 1, 0));
.. este gameTextureAtlas load ();
}
catch (e TextureAtlasBuilderException final)
{
. De depuración e (e);
}
}
Como puede ver hemos creado nueva textura y cargamos 4 regiones de textura para
nuestras plataformas y monedas, los activos de carga de gfx / juego / carpeta. Bien, nuestro
Código de Recursos de carga está hecho, ahora vamos a tener cuidado acerca de diferentes
aspectos.
en primer lugar, vamos a crear algunas variables necesarias para nuestro cargador
nivel:
if (tipo. iguales
(TAG_ENTITY_ATTRIBUTE_TYPE_VALUE_PLATFORM1))
{
levelObject = new Sprite (. x, y, resourcesManager
platform1_region, vbom);
. PhysicsFactory createBoxBody (PhysicsWorld,
levelObject, Tipo de cuerpo StaticBody, FIXTURE_DEF.) SetUserData
("Platform1").;
}
else if (tipo. iguales
(TAG_ENTITY_ATTRIBUTE_TYPE_VALUE_PLATFORM2))
{
levelObject = new Sprite (. x, y, resourcesManager
platform2_region, vbom);
cuerpo Body final = PhysicsFactory createBoxBody
(PhysicsWorld, levelObject, Tipo de cuerpo StaticBody, FIXTURE_DEF.).;
. setUserData cuerpo ("platform2");
. PhysicsWorld registerPhysicsConnector (nueva
PhysicsConnector (levelObject, cuerpo, true, false));
}
else if (tipo. iguales
(TAG_ENTITY_ATTRIBUTE_TYPE_VALUE_PLATFORM3))
{
levelObject = new Sprite (. x, y, resourcesManager
platform3_region, vbom);
cuerpo Body final = PhysicsFactory createBoxBody
(PhysicsWorld, levelObject, Tipo de cuerpo StaticBody, FIXTURE_DEF.).;
. setUserData cuerpo ("platform3");
. PhysicsWorld registerPhysicsConnector (nueva
PhysicsConnector (levelObject, cuerpo, true, false));
}
else if (tipo. equals
(TAG_ENTITY_ATTRIBUTE_TYPE_VALUE_COIN))
{
levelObject = new Sprite (x, y,. resourcesManager
coin_region, vbom)
{
@ Override
protected void onManagedUpdate (flotar
pSecondsElapsed)
{
. súper onManagedUpdate (pSecondsElapsed);
/ **
* TODO
* Vamos a posterior comprobar si el jugador
choca con esto (con monedas)
* Y si lo hace, vamos a aumentar la puntuación
y se esconden de la moneda
* Que se completará en los próximos artículos
(después de crear código de jugador)
* /
}
};
levelObject registerEntityModifier (nueva
LoopEntityModifier (nueva ScaleModifier (1, 1, 1.3 f))).;
}
más
{
throw new IllegalArgumentException ();
}
volver levelObject;
}
});
1) volvemos "entidad madre" de todas las entidades cargadas desde un archivo xml. En
otras palabras, entidad en la que todas las entidades cargadas se van a adjuntar. Como se
puede concluir, debemos volver nuestra escena del juego (como lo hacemos en el código
anterior)
@ Override
public void createScene ()
{
createBackground ();
createHUD ();
createPhysics ();
loadLevel (1);
}
En este ejemplo, cargaremos archivo llamado 1.lvl desde / directorio / nivel de activos.
Tiene sólo tres baldosas, pero debería ser suficiente para la animación de ejecución de la
muestra, en nuestro reproductor de juego se ejecutará automáticamente en la dirección
correcta, el jugador controlará la función de salto.
Abrir nuestra clase ResourcesManager, crear nueva variable para la textura de azulejos
reproductor región:
player_region ITiledTextureRegion público;
player_region =
BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset
(gameTextureAtlas, la actividad, "player.png", 3, 1);
No te olvides de poner a los jugadores dentro del directorio assets / gfx / juego gráfico.
Como puede ver, hemos cargado jugadores gráfico, tiene 3 columnas y 1 fila.
Creamos código responsable de la carga del `s del jugador gráfico, ahora vamos a
tener cuidado acerca de jugador` s de clase. Crear una nueva clase llamada
jugador extendida por AnimatedSprite. Usted se verá obligado por eclipsar añadir
constructor. Modificaremos constructor poco.
. paquete com matimdev objeto.;
/ **
* @ Author Mateusz Mysliwiec
* @ Author www.matim-dev.com
* @ Version 1.0
* /
Jugador public abstract class extiende AnimatedSprite
{
/ / ---------------------------------------------
/ / CONSTRUCTOR
/ / ---------------------------------------------
Hicimos esta clase abstracta, porque vamos a crear algunos métodos abstractos.
Como mencionamos modificamos constructor poco, como una región de textura, se utilizó
crear previamente región de textura de nuestro gestor de recursos. Necesitaremos también
algunos parámetros nuevos, tales como la cámara y el mundo de la física.
/ / ---------------------------------------------
/ / variables
/ / ---------------------------------------------
cuerpo Body privado;
if (getY () <= 0)
{
onDie ();
}
si (canRun)
{
. setLinearVelocity cuerpo (nuevo Vector2 (5, el cuerpo
getLinearVelocity () y)..);
}
}
});
}
Lo que acabamos de hacer allí? Inicializamos jugadores cuerpo, ajuste los datos de usuario
para que podamos reconocer este último cuerpo en ciertos eventos (como el contacto entre
la detección de cuerpos), también fijamos la rotación del cuerpo fijo, por lo que el cuerpo
no rotará. Últimos registramos conector física (lo que el jugador `s sprite, se actualizará
automáticamente su posición, a raíz de cambios corporales) en el interior que reemplazar el
método onUpdate (), y utilizamos el método onUpdate cámara, ayuda a reducir el efecto de
cámara" jitering "mientras se mueve. En el extremo, creamos código comprobando jugador
`s Coordenada Y, si el jugador el` s Y es menor que 0, onDie será ejecutado. También
comprobamos si canRun booleano devuelve true, y si es así nos pusimos velocidad lineal
en el eje X para estimular plazo.
ejecutar este método dentro de constructor. Permite también agregar código ajustes
de la cámara `s entidad persecución, por lo que la cámara seguirá la posición del
jugador` s.
Hemos definido la duración de cada jugador `s baldosa / marco (en milisegundos) que se
utiliza para la animación, también fijamos player para animar (continua estableciendo
último parámetro en true) animación de jugador` s región de azulejos de primera a última
baldosa (significa de 0 a 2, ya que primero el valor comienza desde 0 No 1) Por fin, hemos
establecido velocidad lineal al cuerpo en el eje X para establecer reproductor en
funcionamiento.
Simplemente pusimos un poco de velocidad lineal en el eje Y, para estimular jugador salto.
player.java
Descargar archivo
}
return false;
}
dentro de nuestro método createScene, añada esta línea para registrar esta escena
touch oyente:
setOnSceneTouchListener (este);
agregar el código responsable de inicializar jugador dentro del código loader nivel,
tal como lo hicimos en el artículo anterior para las plataformas de carga y la moneda
de un archivo xml:
Ahora sólo tiene que abrir nuestro archivo de datos de nivel, y poner la línea de
nuestro jugador:
Después de ejecutar el juego, debemos ser capaces de ver el jugador en nuestra primera
plataforma.
. 4 Ajuste jugador de ejecución y permitir saltar:
Bueno, ahora, cuando por fin tenemos a nuestro jugador en la escena, vamos a tener
cuidado acerca de las funciones de saltar y correr, como se ha mencionado, nuestro jugador
conterminously ejecutar (automáticamente) en la dirección correcta, después primer toque
de la pantalla, después de eso, cada toque siguiente hará que el jugador salta, bastante
simple, supongo. Para que crear nueva boolean, bandera saber si era el primer toque.
Verificamos si la bandera FirstTouch es falsa, si es así nos pusimos jugador correr y cambio
de pabellón en true. Si la bandera es cierto, cada toque de pantalla hacen player salto.
camera.setChaseEntity (null);
Sin eso, después de regresar a la escena del menú, nos volveríamos a ver pantallas en
negro, ya que la cámara todavía siga nuestra posición del jugador.
That `s todo en este artículo, después de ejecutar nuestro código de juego, usted debería ser
capaz de ver el jugador, después de reproductor táctil primera pantalla debe empezar a
correr, después de cada otro debe saltar.
Notas: en la actualidad, el jugador puede saltar veces infinito, después de tocar tierra en
primer lugar, que será fijado en el artículo siguiente, donde se introducirá el contacto
oyente. En el próximo artículo también vamos a poner en práctica la moneda del `s de la
cosecha, reproductor de morir, y los límites grada cámara.
cciones, sólo cargamos objetos del juego de xml. En próximos artículos, voy a describir
cómo crear jugador, regulador del juego jugador que controla el movimiento `s y el código
responsable de las plataformas descritas funcionalidades. Haciendo capaz play-nuestro
juego.
Fijamos cámara min. límites a (0x, 0y) y el máximo de los valores analizados desde un
archivo de nivel (en nuestro fichero previamente el nivel será (2000x, 700Y) a causa de esta
línea:
. 2 Recogiendo monedas:
Vamos a tener cuidado acerca de la posibilidad de recoger las monedas, añadir puntos a la
puntuación, y puso las monedas invisibles después de su recogida. Ir al código loadLevel, a
la línea en la que creamos la moneda, salimos onManageUpdate método comentado y
dejado de hacer, ahora vamos a insertar allí el código responsable de comprobar si el
jugador choca con la misma moneda. Ese `s la forma en que debe ser similar:
Ahora vamos a implementar jugador evento dado, cada vez que el jugador se va a caer
(jugador `valor Y menos de 0 segundo) vamos a mostrar" game over ". Últimos usted puede
implementar la función de reinicio del juego después de hacer clic en este mensaje o algo
similar, depende de sus necesidades, por ahora sólo permite visualizar el mensaje cada vez
que el jugador die (caer).
crear dos nuevos campos de texto para más de juego del mensaje y de la bandera
boolean si este mensaje se haya mostrado ya (para evitar que se muestre)
@ Override
public void createScene ()
{
createBackground ();
createHUD ();
createPhysics ();
loadLevel (1);
createGameOverText ();
setOnSceneTouchListener (este);
}
@ Override
public void onDie ()
{
if (! gameOverDisplayed)
{
displayGameOverText ();
}
}
Actualmente, por favor, que es capaz de saltar infinito multiplicado sin tierra en primer
lugar tocando, vamos a arreglarlo ahora, mediante el uso de truco sencillo combinado con
el contacto oyente.
clase Player abierto, crear nuevo campo int para almacenar contacto `s de visitas:
footContacts private int = 0;
modificar la función de salto para comprobar si este valor es mayor que 0. Si es así,
le dejaremos jugador para saltar. Vamos a aumentar este valor cada vez que el
jugador va a tocar la plataforma, y disminuir cada vez que va a terminar el contacto
con la plataforma.
clase GameScene abierta, vamos a crear el contacto oyente. ¿Qué es? Nos permite
ejecutar código mientras que los eventos tales como el contacto comienzan /
extremo entre los accesorios que ocurre. Podemos reconocer Partidos / órganos,
estableciendo sus datos de usuario como lo hicimos, por ejemplo, para los jugadores
cuerpo por la configuración de sus datos de usuario a "jugador".
}
};
volver contactListener;
}
Aquí está, nuestro oyente contacto, en cada beginContact y endContact que en primer lugar,
comprobar si fixture A y B fixture tiene los datos del usuario (los accesorios de A y B son
accesorios entre determinado evento, como comenzar el contacto ocurre) Últimos
comprobamos si el usuario cuerpo x2 de datos es igual a "jugador" y en caso afirmativo que
aumentamos (en comenzar contacto) nuestro valor de contacto del pie o disminuirlo (en el
contacto final) Tenga en cuenta que el jugador podría también Fixture A (x1), de modo que
podría ser útil para comprobar también si x1 datos de usuario cuerpo es igual a jugador (E
n la práctica, se puede hacer una conjetura sobre qué dispositivo es que,
basada principalmente en el orden que creó las cosas en el mundo) En
este caso, por nuestro código debería funcionar bien.
Regístrese Aqui oyente para nuestro mundo de la física, dentro de un
método responsable de la creación de nuestro mundo de la
física, como este:
Listo, nos acabamos de arreglar nuestro problema "infinito salto", ahora debemos estar
bien, este último utilizaremos contacto oyente para agregar funciones para nuestras
plataformas (como la caída de las plataformas después del contacto con el jugador y así
sucesivamente) que `es todo por este artículo .
En número de artículo 11, le expliqué cuál es la función especial que vamos a aplicar para
las plataformas, como se ha mencionado no debe haber 3 tipos de plataformas:
Hacerlo va a ser muy fácil, puesto que ya creamos código responsable de los niveles de
carga, analizar el archivo de nivel y la creación de la escena del juego. Si usted recuerda,
establecemos diferentes `s de datos de usuario para las masas de cada tipo de plataforma ("
Platform1 "," platform2 "y" platform3 ") a los usuarios de datos` s nos ayudará a reconocer
los eventos que debemos ejecutar, cada vez que se estar en contacto entre ciertos
organismos / accesorios. Vamos a comprobar en nuestra Contacto Oyente dentro
GameScene.
¿Qué hace? Simplemente cambia nuestra platform3 tipo de cuerpo para dinámica, lo que
significa que también será afectada por la gravedad, lo que significa que se va a caer.
Vamos a hacer una función similar para nuestra próxima plataforma (platform2) esta vez,
vamos a utilizar un pequeño retraso antes de comenzar cayendo. Para hacerlo, utilizaremos
manejador temporizador simple.
poner este código dentro beginContact, tal como lo hicimos con la plataforma
anterior.
Notas especiales:
Por favor, tenga en cuenta que en este artículo, le expliqué enfoque sólo muy básico.
Probablemente, depende del tipo de juego, usted debe tener cuidado acerca de la
destrucción de sprites plataforma y el cuerpo, después de que ya no se necesita (ejemplo
después de caerse, digamos por debajo de 0 en el eje Y)
Blog
Tutoriales
Dispositivos Biblioteca
Hoja informativa
Descargar
Contacto
Mi trabajo
Acerca de mí
Creamos juego básico, que le da algunas ideas para crear su propio juego, Ahora vamos a
tener cuidado acerca de la ventana completa de nivel simple, mostrándonos rating / score
después de completar el nivel, vamos a utilizar el enfoque utilizado en muchos juegos,
delatar jugador por 1-3 estrellas.
Vamos a utilizar este arte como una ventana completa de nivel (yeap, sé que mis
habilidades artísticas son hermosos!)
Abrir nuestra clase ResourcesManager, crear dos nuevos campos para nuestras
regiones textura (una región es de baldosas de textura, se utilizará para las estrellas)
complete_window_region =
BitmapTextureAtlasTextureRegionFactory.createFromAsset (gameTextureAtlas,
la actividad, "levelCompleteWindow.png");
complete_stars_region =
BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset
(gameTextureAtlas, la actividad, "star.png", 2, 1);
attachChild (star1);
attachChild (star2);
attachChild (star3);
}
/ **
* El índice de baldosas Cambio `s estrella, depende estrellas
cuentan.
* @ Param starsCount
* /
pantalla public void (StarsCount starsCount, escena escena, cámara
Cámara)
{
/ / Cambiar estrellas índice de mosaico, basado en estrellas
cuenta (1-3)
switch (starsCount)
{
Caso Uno:
. star1 setCurrentTileIndex (0);
. star2 setCurrentTileIndex (1);
. star3 setCurrentTileIndex (1);
romper;
Caso Dos:
. star1 setCurrentTileIndex (0);
. star2 setCurrentTileIndex (0);
. star3 setCurrentTileIndex (1);
romper;
caso TRES:
. star1 setCurrentTileIndex (0);
. star2 setCurrentTileIndex (0);
. star3 setCurrentTileIndex (0);
romper;
}
/ / Ocultar el HUD
cámara getHUD () setVisible (false)..;
De acuerdo, hemos creado el código para nuestra ventana, ahora deja inicializarla, abrir
nuestra clase GameScene, crear nuevo campo para la ventana.
Ahora tenemos que crear algo que se encargará de mostrar nuestra ventana, en nuestro
ejemplo, vamos a crear sprite, después de tocar con nuestro reproductor, aparecerá la
ventana completa el nivel.
Vamos a cargarlo desde xml, como lo hacemos para las plataformas y monedas, en
primer lugar, crear una nueva etiqueta:
poner nuevo cheque dentro de código responsable de nivel de análisis (las mismas
plataformas como, moneda, etc)
Lo que hace, es la creación de nuevos sprites (con región de textura estrellas) en cada
actualización comprueba si chocan con el jugador, y si lo hace, nos mostrará la ventana
completa de nivel, en este caso con 2 estrellas como calificación (puedes cambiarlo,
cambiando el parámetro)
Para demostrar cómo funciona, modificar su archivo 1.lvl (archivo de datos de nivel) y
sustituirlo por:
<? Xml version = "1.0" encoding = "UTF-8">
<Anchura level = altura "1400" = "780">
<Entidad x = "100" y = tipo "100" = "Platform1" />
<Entidad x = "200" y = tipo "200" = "Platform1" />
<Entidad x = "400" y = tipo "200" = "platform2" />
<Entidad x = "530" y = tipo "200" = "platform2" />
<Entidad x = "660" y = tipo "200" = "platform2" />
<Entidad x = "880" y = tipo "240" = "platform3" />
<Entidad x = "1100" y = "330" type = "platform3" />
<Entidad x = "400" y = tipo "270" = "moneda" />
<Entidad x = "500" y = tipo "400" = "moneda" />
<Entidad x = "600" y = tipo "400" = "moneda" />
<Entidad x = "1280" y = "550" type = "levelComplete" />
<Entidad x = "60" y = "140" type = "player" />
</ Nivel>
Sólo lo modifiqué este nivel un poco, para ser más capaz de jugar, y el nivel agregado
objeto completo al final del "nivel" probarlo para ver cómo funciona, la ventana completa
de nivel se debe mostrar (con 2 amarillo y uno inicio gris como un ejemplo)