java - Detección de colisión Libgdx con TiledMap
collision-detection (1)
Estoy luchando con la implementación de un sistema de detección de colisiones a través de tiledmap. Tengo un 2d juego de "estilo pokemon" que tiene un mapa en mosaico renderizado. Específicamente, tengo una capa de "colisión" en mi archivo de mosaico .tmx que quiero interactuar con el jugador y otras entidades. Mi pregunta es cómo conecto el sprite del jugador (extiende la clase Sprite) a la capa de ''colisión'' del mapa de mosaico y causa una colisión entre los dos. Cualquier consejo es apreciado.
En primer lugar, su Player
probablemente no debería extend Sprite
, ya que su jugador suele ser mucho más que un Sprite
. Probablemente se compone de varios sprites o incluso Animations
. Mantenga un sprite como una propiedad del jugador.
La pregunta en sí ya ha sido abordada varias veces. Por lo general, necesita los siguientes pasos:
- Encuentra la capa de colisión en tu mapa
- Extrae todos los objetos de esta capa
- Comprueba cada uno de esos objetos para una colisión
En el código, esto podría parecerse a esto:
int objectLayerId = 5;
TiledMapTileLayer collisionObjectLayer = (TiledMapTileLayer)map.getLayers().get(objectLayerId);
MapObjects objects = collisionObjectLayer.getObjects();
// there are several other types, Rectangle is probably the most common one
for (RectangleMapObject rectangleObject : objects.getByType(RectangleMapObject.class)) {
Rectangle rectangle = rectangleObject.getRectangle();
if (Intersector.overlaps(rectangle, player.getRectangle()) {
// collision happened
}
}
Algunos enlaces más que pueden interesarle:
- Java Tiled Map Game (LibGDX) | Episodio 4: detección de colisión
- Java Tiled Map Game (LibGDX) | Actualización del episodio 4: mejor implementación de detección de colisiones
- Desarrollo de juegos para Android con libgdx - Detección de colisiones, Parte 4
- Juego de ejemplo SuperKoalio con TiledMaps y colisión