Как рисовать картинки при помощи батча и в той же сцене отрисовывать tiledmap через OrthogonalTiledMapRenderer в libgdx?

97
19 августа 2019, 23:40

Когда я пытають отрисовать tiledmap и после этого рисую texture (batch.draw("объект Texture")) я вижу только tiledmap. Как мне решить эту проблемму?

не думаю что код тут чем-то поможет, но тем не менее:

Метод рендер в классе сцены:

public void render(float delta) {
    update();
    //В .show я указал цвет очистки
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();
        camera.translate(hero, batch);
        joystick.render(batch);
        hero.render(batch);
    batch.end();
}

Метод Transate в классе камеры(этот класс двигает камеру за героем и делает параллакс из tiledmap):

    public void translate(Hero hero, SpriteBatch batch){
        // x translate
        if (hero.getVector().x - (int) camera.viewportWidth / 2 < 0) {
//            x = 0;
        } else if (hero.getVector().x + (int) camera.viewportWidth / 2 > mapWidth) {
//            x = mapWidth - (int) camera.viewportWidth;
        } else {
            x = (int) hero.getVector().x - (int) camera.viewportWidth / 2;
            for (int i = 0; i < collisionLoader.length; i++) {
                if (hero.speed < 0){
                    collisionLoader[i].setOffsetX(collisionLoader[i].getOffsetX() - ((collisionLoader.length - i) * (Math.abs(hero.speed) / collisionLoader.length)));
                }else if (hero.speed > 0){
                    collisionLoader[i].setOffsetX(collisionLoader[i].getOffsetX() + (collisionLoader.length - i) * (hero.speed / collisionLoader.length));
                }
            }
        }
        // y translate
        if (hero.getVector().y - (int) camera.viewportHeight / 2 < 0) {
            y = 0;
        } else if (hero.getVector().y + (int) camera.viewportHeight / 2 > mapHeight) {
            y = mapHeight - (int) camera.viewportHeight;
        } else {
            y = (int) hero.getVector().y - (int) camera.viewportHeight / 2;
        }

        // camera update
        camera.update();
        batch.setProjectionMatrix(camera.combined);
        // camera position translate
        camera.position.set(new Vector3(-x, -y, 0));
        camera.position.set(new Vector3(camera.viewportWidth - camera.position.x,
                                        camera.viewportHeight / 2 - 
                                        camera.position.y,
                                        0));
        // tiled render
        renderer.setView(camera);
        renderer.render();
    }

И если что, вот конструктор камеры:

public Camera(int mapWidth, int mapHeight, TiledMap map, 
                          OrthogonalTiledMapRenderer renderer,
                          TiledMapTileLayer[] collisionLoader) {
    camera = new OrthographicCamera(512, 288);
    this.map = map;
    this.renderer = renderer;
    this.mapWidth =  mapWidth;
    this.mapHeight = mapHeight;
    this.collisionLoader = collisionLoader;
    for (int i = 0; i < collisionLoader.length; i++){
        collisionLoader[i] = (TiledMapTileLayer) map.getLayers().get(i);
        this.collisionLoader[i] = collisionLoader[i];
    }
}

В методе joystik.render(batch) как и в hero.render(batch) я просто отрисовываю картинку как обычную текстуру (код выкладывать нет смысла)

И при запуске проги я вижу только tiledmap

Если нужно будет весь код то скажите и я сделаю проект на гит хабе и скину ссылку

Спасибо!

Answer 1

Вот так в целом работает:

@Override
public void render () {
    Gdx.gl.glClearColor(0f, 0f, 0f, 1f);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    camera.update();
    renderer.setView(camera);
    renderer.render();
    batch.begin();
    hero.render(batch);
    batch.end();
}
  1. вынес render.render() перед batch.begin()
  2. убрал batch.setProjectionMatrix(camera.combined);

я хотел запушить бранч того как (по-моему получше), но прав не хватило. Сделал ПР из форка

READ ALSO
как в React js передать свойство элементу onClick или onKeyUp?

как в React js передать свойство элементу onClick или onKeyUp?

вчера начал смотреть React JS, создал скрипт, который просто добавляет на страницу таблицу с input'амиНо мне надо на эти импуты еще повесить событие,...

135
Javascript: запись fn(arg1)(arg2)&hellip;(argN)

Javascript: запись fn(arg1)(arg2)…(argN)

Прошу прощения, если вопрос идиотскийИзучаю JS и функциональное программирование, и не совсем понимаю что означает данная запись

124
Как убрать zoom на amcharts 4?

Как убрать zoom на amcharts 4?

Есть небольшая проблема при использовании amchartsМне нужно построить такой график (зависимость количества товаров от цены)

135
как удалить картинку js? [закрыт]

как удалить картинку js? [закрыт]

Решение вашей задачи:

127