2017-06-29 15 views
1

私のアプリケーションのアンドロイド版を実行すると、ビットマップを使用して描かれたテキストが、私のアンドロイド版のアプリと比べて、デスクトップ版の別の位置に表示されます。私はすでにこの問題を見て、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();これはレンダリングメソッドでステージを描画します。 – Vitalynx

+0

'Label'を使用してステージに追加できると思います。その後、 'font.draw'を削除することができます。ステージの 'viewport'は、異なる解像度をかなりうまく扱うことができます。 – Expiredmind

答えて

1

あなたはカメラのビューポートを更新してから、更新ビューポートでSpriteBatchのprojectionmatrixを更新する必要があります。

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

また、ステージのビューポートを、画面と高さで更新する必要があります。

nmscテキストにはLabelを使用してください。

FillViewportの代わりにExtendViewprotを使用すると、thisの回答があります。

関連する問題