#java #android #libgdx
#java #Android #libgdx
Вопрос:
В настоящее время я разрабатываю игру, в которой вам нужно избегать астероидов. Чтобы игра выглядела одинаково на всех устройствах, я использую FitViewport. К сожалению, я каким-то образом получаю белые полосы сверху и снизу вместо черных. Мой игровой фон тоже белый, поэтому выглядит немного странно.
Игровой экран:
@Override
public void create()
{
float aspectRatio = (float)Gdx.graphics.getWidth() / (float)Gdx.graphics.getHeight();
cam = new OrthographicCamera();
viewport = new FitViewport(MyGdxGame.WIDTH * aspectRatio, MyGdxGame.HEIGHT, cam);
[...]
}
@Override
public void render(SpriteBatch batch)
{
cam.update();
batch.setProjectionMatrix(cam.combined);
batch.begin();
em.render(batch); //render Ship and Asteroids
[...]
}
@Override
public void resize(int width, int height)
{
viewport.update(width, height);
cam.position.set(MyGdxGame.WIDTH / 2, MyGdxGame.HEIGHT /2, 0);
}
Я перетащил корабль в белую полосу.
Комментарии:
1.Попробуйте добавить эти строки раньше
cam.update()
, если вы этого еще не сделали:Gdx.gl.glClearColor(0f, 0f, 0f, 1f)
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
2. К сожалению, фон отверстия с этими двумя линиями черный. Я думаю, что мне нужно использовать белую текстуру в качестве фона, если я хочу создать эффект. -Спасибо-
Ответ №1:
LibGDX предоставляет видовые экраны как более удобный способ работы с различными соотношениями сторон. Вам не нужно умножать MyGdxGame.ШИРИНА с аспектом. Просто инициализируйте его с помощью MyGdxGame.ШИРИНА и MyGdxGame.ВЫСОТА.
Кроме того, в функции изменения размера вы можете изменить положение кулачка, используя значения видового экрана (вместо использования констант):
cam.position.set(cam.viewportWidth / 2, cam.viewportHeight / 2, 0);
Ответ №2:
Я обнаружил некоторые проблемы в вашем коде. для лучшей практики при работе с другим соотношением экранов просто попробуйте использовать окно просмотра fill. Здесь просто редактируется ваш код с помощью области просмотра fill . Просто попробуйте один раз.
@Override
public void create()
{
float aspectRatio = (float)Gdx.graphics.getWidth() / (float)Gdx.graphics.getHeight();
camera = new OrthographicCamera();
camera.position.set(0, 0, 0);
camera.update();
//1280 is the screen width and 800 is screen height
camera.setToOrtho(false, 1280, 800);
viewPort = new FillViewport(1280, 800, camera);
}
@Override
public void render(SpriteBatch batch)
{
batch.setProjectionMatrix(camera.combined);
batch.begin();
em.render(batch); //render Ship and Asteroids
[...]
}
@Override
public void resize(int width, int height)
{
viewPort.update(width, height);
}
just try with the above code . it will definitely work