2016-10-02 2 views
0

В настоящее время я разрабатываю игру, в которой вам нужно избегать астероидов. Чтобы игра выглядела одинаково на каждом устройстве, я использую FitViewport. К сожалению, я как-то получаю белые бары сверху и снизу вместо черных. Фон моей игры также белый, поэтому выглядит немного странно.Fit Viewport Black Bars

GameScreen:

 @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); 
    } 

enter image description here

Я перетащил корабль в белый бар.

+0

Попробуйте добавить эти строки перед 'cam.update()', если вы еще не: 'Gdx.gl.glClearColor (0f, 0f, 0f, 1f)' ' Gdx.gl.glClear (GL20.GL_COLOR_BUFFER_BIT) ' – Marius

+0

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

+0

http://xyproblem.info/ – eldo

ответ

1

LibGDX предоставляет видовые экраны как более удобный способ иметь дело с различными пропорциями. Вам не нужно умножать MyGdxGame.WIDTH с aspectRatio. Просто инициализируйте его с помощью MyGdxGame.WIDTH и MyGdxGame.HEIGHT.

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

cam.position.set(cam.viewportWidth/2, cam.viewportHeight/2, 0); 
0

Я нашел некоторые проблемы в вашем коде. для лучшей практики при работе с другим отношением экрана просто попробуйте заполнить viewPort. Здесь вы просто редактируете свой код с окном просмотра заливки. Просто попробуйте один раз.

  @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