Capítulo 3 - Capas de objetos

Las capas de objetos nos facilitan la creación de figuras geométricas como círculos, cuadrados o líneas, en nuestro juego solo usaremos líneas, estas líneas se llaman polyLines, para facilitar el tratamiento de nuestros niveles, todas las capas de objetos contienen exclusivamente este tipo de objeto. Veamos ahora las aplicaciones que esto tiene.

3.1 Tratando capas de objetos

Cada nivel consta de estas 3 capas de objetos: Ground, Wall y Winning cada capa contiene varias polyLines, la separación en capas es para separar la funcionalidad, es decir si el jugador choca contra el suelo quiero que haga algo y si choca contra una pared deseo que haga algo distinto que al colisionar con el suelo, lo mismo sucede si colisiona con la puerta de final de partida.

Todas son capas de objetos pero cada una deberá tener una función distinta y para ello le asignamos un tag específico a cada una. Seguimos en la clase BaseLevel, veamos cómo obtener estas plyLines y tratarlas.

createPhysicsFromLayer.cpp

Como vemos, usamos auto groundObjLayer = _map->getObjectGroup("nombre-capa") para obtener la capa que contiene los objetos, como en nuestros niveles solo usamos polyLines, iteramos sobre el listado de objetos, y de cada objeto obtenemos una polyLine y unos valores de posición que usaremos como offset en el eje X y eje Y. Estos offset se usan para posicionar correctamente los puntos de las polylines (recordar que el eje Y de cocos y Tiled no corresponden).

Con el objetivo de ver que los puntos obtenidos, se han calculado correctamente, usamos un DrawNode de cocos que nos permitirá dibujar líneas en nuestro juego, para ello creamos el DrawNode auto lineDrawer = DrawNode::create() y luego simplemente llamamos a su método drawLine para cada par de puntos. Esto es sólo para debug, recuerda comentar o eliminar el código relativo al lineDrawer para ver bien el juego.

Si ejecutamos veremos las líneas que bordean el terreno entre otras pintadas de color naranja. Además de crear etas líneas, se llama al método createPhysicsBodyFromPoints que es el que añade la física relativa a estas capas de objetos y cuya implementación veremos en capítulos siguientes.

3.2 Obtener cada capa

Como sabemos, cada capa de objetos está separada en capas para poder distinguir funcionalidades y esto lo hacemos asignando un tag concreto a cada grupo de líneas. En el método init, vemos como se llama al método createPhysicsFromLayer explicado anteriormente con los nombres de cada capa de objetos y el Tag correspondiente a esa capa.

init.cpp

Como vemos, usar sólo polyLines, nos permite reutilizar la función createPhysicsFromLayer para cada capa de objetos en nuestro juego, en capítulos siguientes veremos para que sirve asignar esos tags, y cómo funciona la física en cocos2d-x.

Nuestoro juego tras pintar estas polyLines quedaría con este aspecto

juego

En el capítulo 5 trataremos la físca de nuestro juego con lo que veremos posicionados a nuestro jugador y los múltiples enemigos.


Capítulo anterior | Capítulo siguiente