2016-10-01 3 views
0

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

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

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

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

ответ

0

Различные телефоны имеют разное соотношение сторон в их размере экрана. вот почему он показывает разные экраны. Чтобы избежать этой проблемы, вы должны использовать viewPort. Таким образом, вы сможете обрабатывать различные размеры экрана. для получения более подробной информации вы должны прочитать документацию 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. 
+0

спасибо! Я реализую его в своей следующей игре –

+0

Все самое лучшее –

0

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

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

+0

Я установил ее, добавив: FreeTypeFontGenerator.setMaxTextureSize (FreeTypeFontGenerator.NO_MAXIMUM); источник: https://github.com/libgdx/libgdx/issues/3525 –

+0

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

+0

Вы правы, я забыл FreeTypeFont ... –

0

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

public class myGame extends ApplicationAdapter { 

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

// Общее разрешение экрана INT APP_WIDTH общественное = 1280; public int APP_HEIGHT = 800; public int fontPositionIn_X = 600; public int fontPositionIn_Y = 400; общественного 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() { 
} 

}

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

Смежные вопросы