Как заставить спрайты поддерживать разные размеры экрана?

Я использую libgdx для работы над игрой, но только что наткнулся на то, как мне реализовать ее для разных размеров экрана? Я понял, как позиционировать изображения для разных размеров и разрешений, но как сделать так, чтобы спрайты поддерживали разные размеры экрана? У меня фон на 320х480 идет нормально но занимает очень мало места на 480 на 800, как это сделать что бы работало на всех экранах?


person Mohammad Danish Siddiqui    schedule 11.01.2012    source источник


Ответы (4)


У вас есть различные варианты в зависимости от того, что вы счастливы делать,

а. Вы можете использовать набор спрайтов HQ, уменьшенных, чтобы они поместились на каждом из экранов, например;

в изменении размера ()

width = arg0;
height = arg1;

затем в вашем рендере ()

batch.draw(textureRegion, -width/2, -height/2, width, height);

будет рисовать спрайт по всему экрану (при условии, что ортогональная камера находится в центре 0,0)

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

person Neilos    schedule 13.01.2012

Вы можете использовать scene2d. Там вы можете сообщить сцене, что размер окна изменился в приложении

@Override
public void resize(int width, int height) {
    stage.setViewport(width, height, true);
...
}
person instantlink    schedule 15.01.2013

Разделите экран на виртуальные единицы, например сетку 10x10. Рассчитайте свои виртуальные единицы из фактического размера экрана.

VIRTUAL_UNIT_WIDTH = Gdx.graphics.getWidth()/10;
VIRTUAL_UNIT_HEIGHT = Gdx.graphics.getHeight()/10;

И установите размер спрайта с помощью этих виртуальных единиц и используйте виртуальные единицы при вызове spriteBatch.draw();

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

Надеюсь, что это дает вам представление.

person Veljko    schedule 18.07.2014

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

Я всегда использую графические изображения для размера экрана 1920.0x1080.0

ScreenViewport screenViewport=new ScreenViewport(camera);
screenViewport.setUnitsPerPixel(Math.min(1920.0f/Gdx.graphics.getWidth(),1080.0f/Gdx.graphics.getHeight()));
stage = new Stage(screenViewport);

@Override
public void resize (int width, int height) {
    ScreenViewport screenViewport= (ScreenViewport) stage.getViewport();
    screenViewport.setUnitsPerPixel(Math.min(1920.0f/width,1080.0f/height));
    screenViewport.update(width,height,false);
}

Здесь вы можете установить свой подход из Math.min() или Math.max().

Это приведет к тому, что размер окна просмотра вашей камеры будет близок к 1920,0 * 1080,0.

Device screen-size Math.max()      Math.max() 
800.0x480.0        1800.0x1080.0   1920.0x1152.0
1920.0x1080.0      1920.0x1080.0   1920.0x1080.0
2048.0x1440.0      1536.0x1080.0   1920.0x1350.0

Примечание. Всегда используйте camera.viewportWidth и camera.viewportHeight для заданных позиций экранов игрового интерфейса.

person Kalpesh    schedule 19.07.2017