Текст LibGDX не отображается должным образом на больших экранах

#java #android #libgdx

#java #Android #libgdx

Вопрос:

На моем LG Leon 854 x 480 он отображается нормально, но при большем разрешении экрана (2560 x 1440) это происходит: http://imgur.com/a/rcbJK .

Код для обработки текста: http://imgur.com/a/c316e .

Я попытался расширить границы метки, потому что подумал, что это может ограничить текст, но он все равно не будет отображаться должным образом.

Что может быть причиной этого?

Ответ №1:

Разные мобильные телефоны имеют разное соотношение сторон в размере экрана. именно по этой причине он показывает разные разные экраны. чтобы избежать этой проблемы, вы должны использовать окно просмотра. Таким образом, вы сможете обрабатывать разные размеры экрана. для получения более подробной информации вы должны прочитать документацию libgdx. здесь я публикую пример кода, который может помочь вам справиться с разным размером экрана. существует три вида видовых экранов, в основном использующих 1) fillviewport 2) FitViewport 3) stretchviewport вот подробная документация.

https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/utils/viewport/FillViewport.html

 public class myGame extends ApplicationAdapter {

public OrthographicCamera camera;
public Viewport viewPort;
private SpriteBatch batch;

public myGame() {

}

@Override
public void create() {
    float w = Gdx.graphics.getWidth();
    float h = Gdx.graphics.getHeight();

    camera = new OrthographicCamera();
    camera.position.set(0, 0, 0);
    camera.update();
    camera.setToOrtho(false, 1280, 800);
    viewPort = new FillViewport(1280, 800, camera);


}

@Override
public void dispose() {
    batch.dispose();
}





@Override
public void render() {
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);
    float deltaTime = Gdx.graphics.getDeltaTime();
    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    batch.draw(sprie,0,0)
    batch.end();

}

@Override
public void resize(int width, int height) {
    viewPort.update(width, height);
}

@Override
public void pause() {
}

@Override
public void resume() {
}
}
// don't copy paste it . just try to understand and implement it.
  

Комментарии:

1. Всего наилучшего

Ответ №2:

Вы должны использовать Scene2D и ViewPort.

Кроме того, будьте осторожны при использовании координат (т.Е.: x: 64, y: 32 изменяется при каждом разном размере экрана)

Комментарии:

1. Я исправил это, добавив: FreeTypeFontGenerator.setMaxTextureSize(FreeTypeFontGenerator.NO_MAXIMUM); источник: github.com/libgdx/libgdx/issues/3525

2. Я думал об использовании ViewPort, но мне действительно нравится точное управление позиционированием объектов относительно высоты или ширины экрана.

Ответ №3:

Это распространенная проблема при запуске игры на нескольких устройствах. Потому что ваша игра работает в разных соотношениях сторон на разных экранах. обычно это называется проблемой с несколькими экранами. Чтобы решить эту проблему, libgdx предоставляет его в классе, называемом viewPort. В основном вы можете видеть три окна просмотра. 1) Заполнить область просмотра. 2) Установите окно просмотра. 3) растянуть область просмотра. Для получения более подробной информации вы можете ознакомиться с документацией libgdx. Здесь я публикую пример кода, который может решить ваши проблемы с несколькими экранами.

 public class myGame extends ApplicationAdapter {

public OrthographicCamera camera;
public Viewport viewPort;
private SpriteBatch batch;
private BitmapFont myScoreFont;
  

// Общее разрешение экрана
public int APP_WIDTH= 1280;
public int APP_HEIGHT=800;
public int fontPositionIn_X=600;
public int fontPositionIn_Y=400;
public MyGame() {

 }

@Override
public void create() {
        myScoreFont = new    BitmapFont(Gdx.files.internal(Constants.PATH_TO_MY_SCORE_FONT), true);
    batch = new SpriteBatch();
        float w = Gdx.graphics.getWidth();
    float h = Gdx.graphics.getHeight();
        camera = new OrthographicCamera();
    camera.position.set(0, 0, 0);
    camera.update();
    camera.setToOrtho(false, APP_WIDTH, APP_HEIGHT);
    viewPort = new fillViewPort(1280, 800, camera);


}

@Override
public void dispose() {
    batch.dispose();
}





@Override
public void render() {
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);
    float deltaTime = Gdx.graphics.getDeltaTime();
    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    myScoreFont.draw(batch,"any texts", fontPositionIn_X, fontPositionIn_Y)
    batch.end();

}

@Override
public void resize(int width, int height) {
    viewPort.update(width, height);
}

@Override
public void pause() {
}

@Override
public void resume() {
}
  

}

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