Tiled LibGDX слой объектов представленых тайлами не отрисовывается

Рейтинг: 1Ответов: 2Опубликовано: 24.06.2023

Я загрузчик карт TiledMap, вот код как я подгружаю и отриосвываю карту

override fun create() {
    // Создаем камеру
    camera = OrthographicCamera()
    camera!!.setToOrtho(false, 720f, 1280f)
    camera!!.update()

    // Загружаем и создаем объекты для отображения карты
    tiledMap = TmxMapLoader().load("level1.tmx")
    tiledMapRenderer = OrthogonalTiledMapRenderer(tiledMap,1f).apply {
        setView(camera)
    }

}

override fun render() {
    // Очистка экрана
    Gdx.gl.glClearColor(0f, 0f, 0f, 1f)
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)

    camera!!.update()

    tiledMapRenderer!!.setView(camera)
    tiledMapRenderer!!.render()

}

но слой с объектами по которым движется игрок не отрисовывается, при этом, если Tile разместить на TileLayer то всё хорошо работает. Мне нужен слой объектов так как колайдеры заданы полигонами,и имеют определенный градус поворота(-15, 34), что не дает сделать обыкновенный tilelayer. пробовал отрисовывать в ручную, но они немного неверно смещаются

Ответы

▲ 1Принят

я переопределил метод renderObject и теперь он может отрисовывать TileObject с анимациями и правильным поворотом

 override fun renderObject(`object`: MapObject?) {
    `object`?.let {
        when(it){
            is TiledMapTileMapObject -> {
                val tile = it.tile
                val currentFrame = if (tile is AnimatedTiledMapTile){
                    tile.currentFrame.textureRegion
                }
                else{
                    tile.textureRegion
                }
                val width = currentFrame.regionWidth.toFloat()
                val height = currentFrame.regionHeight.toFloat()

                batch.draw(currentFrame,it.x,it.y,it.originX,it.originY,width,height,it.scaleX,it.scaleY,-it.rotation)
            }
        }
    }
}
▲ 1

Вообщем, проблема заключается в том что в классе OrthogonalTiledMapRenderer при отрисовке слоя вызывается метод renderObjects, в свою же очередь он получает список всех объектов на слое, и вызывает renderObject(object) для каждого объекта. посмотрев этот метод я понял что он пуст

Картинка, того что метод renderObject пуст

С одной стороны я думаю, что это сделанно для возможности самому полностью отрисовывать объекты и производительности, но честно, как-то удивлен, учитывая что в документации об этом нигде не сказано