Игровые спрайты и поддержка нескольких экранов - PullRequest
3 голосов
/ 12 января 2012

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

Ответы [ 5 ]

5 голосов
/ 13 января 2012

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

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

в resize ()

width = arg0;
height = arg1;

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

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

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

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

3 голосов
/ 15 января 2013

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

@Override
public void resize(int width, int height) {
    stage.setViewport(width, height, true);
...
}
0 голосов
/ 19 июля 2017

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

Я всегда использую графические изображения для размера экрана 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 для заданных положений экранов пользовательского интерфейса игры.

0 голосов
/ 19 июля 2014

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

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

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

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

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

0 голосов
/ 01 мая 2012

Посмотрите эту ссылку: Как работать с различными форматами изображения в libGDX?

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

...