Libgdx Freetype Font Generator Outline ведет себя странно

Я использую диспетчер активов для создания своего шрифта с использованием объекта FreeTypeFontGeneratorLoader, в частности, я использую этот текущий параметр

FreeTypeFontLoaderParameter parameter = new FreeTypeFontLoaderParameter();
parameter.fontFileName = "fonts/myFont.ttf";
parameter.fontParameters.size = size;
parameter.fontParameters.minFilter = Texture.TextureFilter.Linear;
parameter.fontParameters.magFilter = Texture.TextureFilter.Linear;
if(withStroke) {
    parameter.fontParameters.borderStraight = true;
    parameter.fontParameters.borderColor = Color.BLACK;
    parameter.fontParameters.borderWidth = 1.5f;
}
parameter.fontParameters.color = Assets.fontColor;

(затем я загружаю свой шрифт в статическую переменную в классе Assets)

все нормально, если приложение запускается в первый раз, вот сгенерированный текст с наброском скриншота:

скриншот

но после того, как я закрою свое приложение, используя эту строку

Gdx.app.exit();

а затем снова откройте мое приложение, контур теперь начинает вести себя странно, вот скриншот странного сгенерированного шрифта:

скриншот

Я уже пытаюсь настроить свой диспетчер активов в случае удаления ApplicationListener в Gdx, но иногда мой шрифт все еще ведет себя странно.

если я очищаю свою обработку во всех задачах Android, шрифт снова становится нормальным.

Можете ли вы сказать мне возможные решения, почему это происходит, и есть ли у вас какие-либо предложения? Спасибо


person Felix Adhinata    schedule 21.04.2016    source источник
comment
это похоже на проблему с шейдером и может быть связано с потерей контекста для этого шейдера. Итак, как предполагают TomGrill Games, это может быть проблема со статической переменной.   -  person p.streef    schedule 22.04.2016


Ответы (2)


Android иногда сохраняет статические (конечные) переменные, даже если приложение потеряло свой контекст.

При использовании статических переменных: убедитесь, что вы удаляете их при необходимости, а затем установите для них значение null. Или не используйте static для активов.

person TomGrill Games    schedule 22.04.2016

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

Gdx.app.exit();

просто делает это:

Расписание выхода из приложения. На Android это приведет к вызову pause() и dispose() через какое-то время в будущем, это не приведет к немедленному завершению вашего приложения"

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

System.exit(0);

затем мое приложение загружается и генерирует новый шрифт, когда пользователь снова открывает мое приложение.

person Felix Adhinata    schedule 25.04.2016