Подгонка черных полос видового экрана

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

3. xyproblem.info

Ответ №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