Buenas, actualmente estoy desarrollando un juego en 2D (una basurita para ir aprendiendo a desarrollar juegos y tal) y tengo un problema al detectar las colisiones del sprite del jugador con los obstáculos del mapa.
Antes de nada, decir que el mapa lo creo con Tiled y lo cargo en Libgdx con una función que permite leer archivos .tmx.
Bien el problema es que, buscando por Internet múltiples formas de detectar colisiones, encontré una que consiste en "leer" una capa determinada (la de los obstáculos) y generar rectángulos/círculos/polígonos como objetos para poder comprobar si en efecto el sprite está colisionando o no. El código es el siguiente:
public class CheckCollision {
public static void checkCollision(Sprite sprite, TiledMap map) {
TiledMapTileLayer collisionObjectLayer = (TiledMapTileLayer) map.getLayers().get("obstacles"); // Obtiene la capa donde se encuentran los obstáculos
MapObjects objects = collisionObjectLayer.getObjects(); // Obtiene los objetos de la capa
System.out.println(objects.getCount()); // Chivato para comprobar si en efecto a cargado los objetos (aquí el resultado es 0, es decir, no carga nada)
// Creación del rectángulo del objeto y comprobación de la colisión"
for (RectangleMapObject rectangleObject : objects.getByType(RectangleMapObject.class)) {
com.badlogic.gdx.math.Rectangle rectangle = rectangleObject.getRectangle();
if (Intersector.overlaps(rectangle, sprite.getBoundingRectangle())) {
System.out.println("Colission happened");
}
}
}
}
Pues bien, como indiqué en la línea 5, el chivato me dice que la cantidad de objetos que obtuvo fueron 0, no cargó nada vamos. Esto me llevó a mirar si el problema era de como los cree en Tiled pero miré varios tutoriales y todos lo hacían como estaba haciendo yo: creando una nueva capa de patrones y poniendo el nombre que querías a dicha capa.
Finalmente pensé que si lo que estaba cargando del mapa eran objetos pues la capa debía ser una nueva capa de objetos, la cree y la intenté cargar pero entonces me saltó el siguiente error:
Exception in thread "LWJGL Application" java.lang.ClassCastException: com.badlogic.gdx.maps.MapLayer cannot be cast to com.badlogic.gdx.maps.tiled.TiledMapTileLayer
Error que no da si creas una nueva capa de patrones. Y bueno ahora estoy aquí buscando soluciones y mirando por Internet pero no encuentro el fallo.
Gracias de antemano.