libGDX — проблема рендеринга с Tiled

Почему-то, когда я убегаю, блоки позади меня на краю экрана исчезают. Трудно сделать снимок, как они это делают, потому что в каждом кадре они разные, но вот как это выглядит:

введите здесь описание изображения

Если бы кто-нибудь мог сказать мне, почему он это делает, это было бы здорово :)

public void show() {
    map = new TmxMapLoader().load("assets/maps/map.tmx");

    renderer = new OrthogonalTiledMapRenderer(map);
    sr = new ShapeRenderer();
    sr.setColor(Color.CYAN);
    Gdx.gl.glLineWidth(3);

    camera = new OrthographicCamera();
}

public void render(float delta) {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    camera.position.set(player.getX() + player.getWidth() / 2, player.getY() + player.getHeight() / 2, 0);
    camera.update();

    renderer.setView(camera);

    renderer.render(background);

    renderer.getSpriteBatch().begin();
    player.draw(renderer.getSpriteBatch());
    renderer.getSpriteBatch().end();

    renderer.render(foreground);

    // render objects
    sr.setProjectionMatrix(camera.combined);
    for(MapObject object : map.getLayers().get("objects").getObjects())
        if(object instanceof RectangleMapObject) {
            RectangleMapObject rectObject = (RectangleMapObject) object;
            Rectangle rect = rectObject.getRectangle();
            if(rectObject.getProperties().containsKey("gid")) { // if it contains the gid key, it's an image object from Tiled
                int gid = rectObject.getProperties().get("gid", Integer.class);
                TiledMapTile tile = map.getTileSets().getTile(gid);
                renderer.getSpriteBatch().begin();
                renderer.getSpriteBatch().draw(tile.getTextureRegion(), rect.x, rect.y);
                renderer.getSpriteBatch().end();
            } else { // otherwise, it's a normal RectangleMapObject
                sr.begin(ShapeType.Filled);
                sr.rect(rect.x, rect.y, rect.width, rect.height);
                sr.end();
            }
        } else if(object instanceof CircleMapObject) {
            Circle circle = ((CircleMapObject) object).getCircle();
            sr.begin(ShapeType.Filled);
            sr.circle(circle.x, circle.y, circle.radius);
            sr.end();
        } else if(object instanceof EllipseMapObject) {
            Ellipse ellipse = ((EllipseMapObject) object).getEllipse();
            sr.begin(ShapeType.Filled);
            sr.ellipse(ellipse.x, ellipse.y, ellipse.width, ellipse.height);
            sr.end();
        } else if(object instanceof PolylineMapObject) {
            Polyline line = ((PolylineMapObject) object).getPolyline();
            sr.begin(ShapeType.Line);
            sr.polyline(line.getTransformedVertices());
            sr.end();
        } else if(object instanceof PolygonMapObject) {
            Polygon poly = ((PolygonMapObject) object).getPolygon();
            sr.begin(ShapeType.Line);
            sr.polygon(poly.getTransformedVertices());
            sr.end();
        }
}

person Divergent    schedule 05.09.2014    source источник
comment
Какой рендерер карты вы используете?   -  person Paul Manta    schedule 06.09.2014
comment
Я использую графику libGDX, OrthogonalTiledMapRenderer   -  person Divergent    schedule 06.09.2014
comment
Попробуйте переключиться на OrthoCahedTiledMaprenderer, чтобы проверить, сохраняется ли проблема. Также, пожалуйста, напишите функцию, в которой вы рендерите карту. Существуют ли какие-либо другие экземпляры SpriteBatch, кроме того, который используется визуализатором карты?   -  person Paul Manta    schedule 06.09.2014
comment
Нет OrthoCahedTiledMaprenderer и есть только 1 экземпляр spritebatch, я редактирую пост, чтобы добавить функцию   -  person Divergent    schedule 06.09.2014
comment
Вот документация по API для OrthoCachedTiledMapRenderer; возможно, вы используете старую версию LibGDX. Кроме того, вы должны знать, что на самом деле вы используете два экземпляра SpriteBatch, потому что модуль визуализации создает свой собственный. Я не говорю, что это решит вашу проблему, но если вы хотите, чтобы средство визуализации не создавало свой собственный SpriteBatch, вы можете передать его в конструктор.   -  person Paul Manta    schedule 06.09.2014
comment
Я почти уверен, что использую более старую версию libGDX. Может ли это повлиять на это?   -  person Divergent    schedule 08.09.2014
comment
Я не знаю. К сожалению, я не могу помочь, так как сам никогда не сталкивался с этой проблемой, и кажется, что опыт LibGDX в SO очень низок. Вам также следует задать этот вопрос на официальных справочных форумах. , там тебе может больше повезти. :)   -  person Paul Manta    schedule 08.09.2014


Ответы (1)


Я использую OrthogonalTiledMapRenderer.

Теперь это работает, и плитки (большие плитки) не исчезают:

    float x = orthographicCamera.position.x - orthographicCamera.viewportWidth * orthographicCamera.zoom;
    float y = orthographicCamera.position.y - orthographicCamera.viewportHeight * orthographicCamera.zoom;

    float width = orthographicCamera.viewportWidth * orthographicCamera.zoom * 2;
    float height = orthographicCamera.viewportHeight * orthographicCamera.zoom * 2;

    orthogonalTiledMapRenderer.setView(orthographicCamera.combined, x, y, width, height);
person Nimitack    schedule 03.01.2018