Моя игра с мозаичными картами продолжает мерцать по краям плиток, когда камера движется - PullRequest
1 голос
/ 11 мая 2019

Иногда на моем экране сверху вниз мерцает ужасное мерцание. Это происходит только тогда, когда камера перемещается (что следует за моим персонажем игрока). Неважно, где я нахожусь на карте, чтобы это произошло. Если я перестану двигаться в нужный момент, линии останутся видимыми, пока я не начну двигаться снова. Я добавил скриншот, чтобы вы могли видеть, как он выглядит:

Flickering

Если вы присмотритесь, вы можете заметить, что линии представляют часть моей плитки "горная стена" (эта плитка используется чуть ниже на карте):

Mountain Wall

Я попытался поместить cam.update () в начало метода update (), как предлагали некоторые другие пользователи StackOverflow, но, похоже, это не работает. Я также позаботился о том, чтобы между изображениями в изображении наборов плиток абсолютно не было пробелов. Большинство вопросов, которые я вижу по этому вопросу, имеют другой вид мерцания, чем я.

Вот код моего экрана и всего, что происходит:

    public PlayScreen(MyGame game){
        cam = new OrthographicCamera();
        batch = new SpriteBatch();
        gameMap = new TestMap(startMap);
        player = new Player(this);

        Gdx.input.setInputProcessor(this);
    }

    public void update(float delta){
        player.update(delta);

        Rectangle playerRect = player.getNextRectangle(delta);
        Rectangle teleportRect = gameMap.teleportTo(playerRect);

        if(!gameMap.isColliding(playerRect)){
            player.setPosition(playerRect);
        }
        if(teleportRect != null){
            player.setPosition(teleportRect);
        }

        cam.viewportHeight = Gdx.graphics.getHeight() / zoomLevel;
        cam.viewportWidth = Gdx.graphics.getWidth() / zoomLevel;

        cam.position.x = player.getX() + (player.getWidth() / 2);
        cam.position.y = player.getY() + (player.getHeight() / 2);
        cam.update();
    }

    @Override
    public void render(float delta) {
        update(delta);

        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        gameMap.render(cam);

        Gdx.graphics.setTitle("FPS: "+Gdx.graphics.getFramesPerSecond());
        gameMap.getMapRenderer().getBatch().begin();
        player.draw(gameMap.getMapRenderer().getBatch());
        gameMap.getMapRenderer().getBatch().end();
    }
...