java libgdx collision-detection

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:

  1. Encuentra la capa de colisión en tu mapa
  2. Extrae todos los objetos de esta capa
  3. 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: