2017-06-29 44 views
1

当我运行我的应用程序的Android版本时,使用位图绘制的文本显示在我的桌面版本中的(方式)不同位置上,而不是我的Android版本的应用程序中。我已经看过这个问题,并且读到我必须将Projectmatrix设置为合并,但这没有帮助。不知道什么原因可能是跨平台显示不同位置的文本。LIBGDX字体在不同平台上的不同位置

public class HighScoresScreen implements Screen{ 

    private CrossplatformApp game; 
    private Stage stage; 
    private TextButton backButton; 
    private OrthographicCamera camera; 
    private Table table; 
    BitmapFont font = new BitmapFont(); 
    private Skin skin; 
    private Texture background; 
    private String[] data; 
    private String[] playerscores; 
    String nm = ""; 
    String sc = ""; 

    public HighScoresScreen (CrossplatformApp game) { 
     this.game = game; 
     this.camera = new OrthographicCamera(Constants.WIDTH, Constants.HEIGHT); 
     this.camera.position.set(Constants.WIDTH/2, Constants.HEIGHT/2, 0); 
     this.camera.update(); 
     game.batch.setProjectionMatrix(this.camera.combined); 
     this.skin = new Skin(Gdx.files.internal("skin/uiskin.json")); 
     this.background = new Texture("Screens/HighscoresScreen/highscores.png"); 
    } 


    @Override 
    public void show() { 

     backButton = new TextButton("back", skin); 
     backButton.addListener(new ClickListener(){ 
      @Override 
      public void clicked(InputEvent event, float x, float y) { 
       game.setScreen(new MenuScreen(game)); 
       MenuScreen.musicHandler.stopMusic(); 
      } 
     }); 

     Gdx.input.setInputProcessor(stage); 

     JSONfunctions json = new JSONfunctions(); 
     parseJSON parse = new parseJSON(json.doInBackground()); 

     for (String i : parse.getNames()){ 
      if(i != null) { 
       nm += i; 
       nm += "\n\n"; 
      } else { 
       break; 
      } 
     } 

     System.out.println(nm); 
// 
     for (String i : parse.getScores()){ 
      if(i != null) { 
       sc += i; 
       sc += "\n\n"; 
      } else { 
       break; 
      } 
     } 

     table = new Table(); 
     table.setFillParent(true); 
     table.bottom(); 
     table.add(backButton).size(100, 100); 
     stage.addActor(table); 
    } 

    @Override 
    public void render(float delta) { 
     game.batch.begin(); 
     game.batch.draw(background, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 

     font.draw(game.batch, nm, 100, 300); 
     font.draw(game.batch, sc, 480, 300); 

     game.batch.end(); 

    } 

    @Override 
    public void resize(int width, int height) { 

    } 

    @Override 
    public void pause() { 

    } 

    @Override 
    public void resume() { 

    } 

    @Override 
    public void hide() { 

    } 

    @Override 
    public void dispose() { 
     stage.dispose(); 

    } 
} 
+0

您是否尝试使用视口? – Expiredmind

+0

@Expiredmind是我有,像这样:'this.camera = new OrthographicCamera(); this.stage = new Stage(new FillViewport(Constants.WIDTH,Constants.HEIGHT,camera));'然后在渲染方法中绘制这个舞台 – Vitalynx

+0

我认为你可以使用'Label'然后将它添加到舞台上。然后你可以删除'font.draw'。舞台中的“视口”可以很好地处理不同的分辨率。 – Expiredmind

回答

1

您需要更新相机的视口,然后用最新更新视口的SpriteBatch projectionmatrix。

@Override 
public void resize(int width, int height) { 
    camera.setToOrtho(false, width, height); 
    game.batch.setProjectionMatrix(camera.combined); 
} 

此外,你需要更新舞台的视口与屏幕和高度。

您应该使用Label代替nmsc文本。

最好用ExtendViewprot而不是FillViewport,看看this的答案。