sábado, 11 de octubre de 2014

Evil Zombie Invasion - Un juego extremadamente difícil

Evil Zombie Invasion

Hace ya un tiempo que tenía pensado hacer un review de este juego.Me he decidido a grabarlo hoy porque a pesar de que está gustando está siendo marcado con etiquetas del estilo "extremadamente difícil", "estresadamente difícil" o "catastróficamente difícil". Pues bien vamos a comprobarlo. Además hoy vamos a estrenar canal de youtube, por lo que la parte de la descripción me la voy a saltar, ya que el juego lo veréis en el vídeo. Esta ha sido mi experiencia con el juego:





Conclusión: Un juego de los que engancha y mucho. Le falta más variedad de armas y zombis.
Lo mejor: Que no pude parar hasta conseguir el récord
Lo peor: Algunos detalles gráficos y que el modo arcade no está completo
Tiempo que tardé en quitar el juego: 22 min
Dificultad: En mi opinión media, para otros usuarios alta.
Valoración sobre 10: 8
Similares: No hemos encontrado
Desarrollador: Daniel Velázquez
Link de descarga: https://play.google.com/store/apps/details?id=examples.zombieInvasion

martes, 7 de octubre de 2014

Haciendo correr nuestro juego

Recomendaciones

Muy buenas a todos los lectores. Para seguir con la dinámica que expliqué en la entrada anterior, antes que nada haré algunas recomendaciones. De nuevo se trata de otro canal. En este caso del canal de Pumpkin! . Tiene vídeos de altísima calidad y muy divertidos que os aconsejo que no os perdáis. Aquí os dejo su enlace:


Twitter: @pimpinyt


Además, para finalizar el apartado de recomendaciones os recuerdo el canal recomendado anteriormente. Suscribiros que merece la pena de verdad:

Twitter: @10Emiaj


Tutorial

Pues ya es hora de empezar con la parte divertida. Hoy aprenderemos a configurar la clase principal de nuestro proyecto y mostraremos la primera escena de nuestro juego. Es decir, en este primer tutorial de programación ya conseguiremos hacer correr nuestro juego.
Estad muy atentos a cada indicación y como ya hemos hecho anteriormente, si queda alguna duda podéis dejarlas en los comentarios o contestar la encuesta de la página principal del blog, en la que ustedes decidís si profundizamos más en el tema o pasamos a la siguiente lección.

Bien, lo primero que debemos hacer en cualquier proyecto Android es crear el propio proyecto. Para ello hacemos click en File -> New -> Android Applications Projects. Nos aparecerá una ventana como esta:



Rellenamos el formulario tal y como aparece en la foto y presionamos Next. En la nueva ventana que nos aparece deseleccionamos la opción “Create custom luncher icon” y presionamos Next varias veces hasta que nos dejen presionar Finish.

Una vez realizados estos pasos os debe aparecer un nuevo proyecto en la parte izquierda de Eclipse (es posible que automáticamente se cree otro adicional con el nombre “appcompat_v7”. Ignoradlo y seguid con el tutorial). Solo nos queda un paso antes de ponernos con el código, que es decirle al proyecto que use como librería el proyecto de Andengine. Para ello hacemos click en el botón derecho del ratón sobre nuestro proyecto y presionamos Properties. A la derecha de la ventana que nos aparece hacemos click en Android, y luego añadimos el proyecto Andengine como librería presionando en Add y eligiendo el proyecto correspondiente. Si todo sale bien os tiene que salir algo parecido a esto:


Si de lo contrario en vez de los ticks verdes os aparecieran unas aspas rojas, tendréis que volver a realizar este último paso.

Tras esto llegaría el momento que todos esperábamos. Empecemos a picar código. Un juego para Android, a diferencia de una aplicación, suele tener una única actividad. Echad un vistazo a vuestro proyecto y curiosead por los paquetes y carpetas creados (Sin cambiar nada). Observaréis que hay una clase llamada MainActivity que si la abrís tiene este aspecto:



De momento esta será la principal y única actividad que tendrá nuestro proyecto. Ahora lo primero que debemos hacer es que esta actividad extienda de una clase actividad especial que nos provee AndEngine en la cual tendremos que implementar una serie de métodos propios del motor de videojuego. En la siguiente entrada os explicaré como funcionan esos métodos y el ciclo de vida de un juego para Android. Antes quiero que en este tutorial veáis lo fácil que es hacer correr nuestra aplicación. Entonces, donde pone “extends ActionBarActivity” lo cambiaremos por “extends BaseGameActivity”. Borramos todo lo que existe desde la línea 12 a la 35 y hacemos clicks con el segundo botón del ratón en la palabra MainActivity para señalar la opción “Add unimplemented methods”. Como resultado nos quedará algo igual a esto:



Ahora vamos a ir explicando y rellenando cada uno de esos métodos. Si algún detalle lo obviamos es bien porque se explicará en entradas posteriores y no es necesario para esta o porque es un conocimiento que vais a adquirir con la práctica y la observación del comportamiento de nuestro juego. No obstante, podéis preguntar lo que os surja.

Empezamos por el método “onCreateEngineOptions”. En este método se configuran una serie de parámetros del motor del juego tales como la cámara, la resolución o la orientación del dispositivo. El método nos debe quedar así:



@Override
public EngineOptions onCreateEngineOptions() {
       camera = new Camera(0, 0, 800, 480);
       EngineOptions engineOptions = new EngineOptions(true,                    ScreenOrientation.LANDSCAPE_FIXEDnew FillResolutionPolicy(), this.camera);
       engineOptions.setWakeLockOptions(WakeLockOptions.SCREEN_ON);
       return engineOptions;
}

Podemos ver que hemos creado un objeto de tipo Camera que hemos situado en las coordenadas 0,0 y con un tamaño de 800x480 píxeles. Además hemos creado un objeto de tipo EngineOptions al que le hemos pasado una serie de parámetros al constructor. Entre ellos, hoy vamos a destacar los siguientes.

ScreenOrientation.LANDSCAPE_FIXED: Indica una orientación horizontal del dispositivo.

New FillResolution(): Indica que sea cual sea la resolución del dispositivo, nuestra aplicación se adaptará a ella ocupando toda la pantalla.

This.camera: Le estamos indicando que use como cámara la que hemos creado en líneas anteriores.


Los métodos onCreateResources y onPopulateScene deben quedar de la siguiente manera:

@Override
public void onCreateResources(
             OnCreateResourcesCallback pOnCreateResourcesCallback)
             throws IOException {
       pOnCreateResourcesCallback.onCreateResourcesFinished();
}
@Override
      
public void onPopulateScene(Scene pScene,
             OnPopulateSceneCallback pOnPopulateSceneCallback)                               throws IOException { pOnPopulateSceneCallback.onPopulateSceneFinished();
}

De momento no los usaremos, así que serán explicados en posteriores tutoriales.

Por último, antes de hacer correr nuestro juego rellenaremos el método “onCreateScene” de este modo:

@Override
public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback)
                    throws IOException {
       Scene scene=new Scene();
       Rectangle rectangle=new Rectangle(100, 400, 75, 75,                              this.getVertexBufferObjectManager());
       scene.attachChild(rectangle);
      
            
       MoveModifier moveModifier = new MoveModifier(3, 200,400 , 600, 400);
       MoveModifier moveModifier2 = new MoveModifier(3, 600, 400, 200, 400);
            
       SequenceEntityModifier sequenceEntityModifier = new                              SequenceEntityModifier(moveModifier,moveModifier2);
            
       LoopEntityModifier loopEntityModifier = new                                             LoopEntityModifier(sequenceEntityModifier);
            
             rectangle.registerEntityModifier(loopEntityModifier);

       pOnCreateSceneCallback.onCreateSceneFinished(scene);
      
}

De este método solo explicaremos la primera parte. Como podéis ver creamos un objeto de tipo Scene. Nosotros llamaremos Scene a cada una de las pantallas que aparecerá en nuestro juego. Tras la designación del Scene hemos creado un objeto del tipo Rectangle y lo hemos posicionado en las coordenadas 100, 400. Además, le hemos dado un tamaño de 75x75. Por último hemos adjuntado el Rectangle a la Scene con el método attachChild, de manera que hemos pintado el rectángulo en nuestra escena del juego.

Ahora, si abrimos el bluestack y ejecutamos nuestra aplicación nos debe aparecer algo similar a esto, en la que el rectángulo debe moverse de lado a lado:



Viendo el resultado obtenido, se me ha ocurrido ya el juego que vamos a trabajar para este tutorial. En la siguiente entrada daré más detalles del mismo. Os dejo aquí una foto del código completo que he realizado por si alguien se pierde durante el tutorial:




Bueno hasta aquí el tutorial de hoy. Espero que os hayáis divertido y que hayáis aprendido mucho. Hasta luego.