2016-06-20 3 views
0

テクスチャを描画して、画面の解像度に合わせてテクスチャのサイズを変更することはできません。ビューポートとカメラに応じてテクスチャを描く

私はScreenViewportを使用しています(私のフォントは滑らかで歪みのないものにします)。

float w = Gdx.graphics.getWidth();          
float h = Gdx.graphics.getHeight(); 
gameCam = new OrthographicCamera(2f * h/w, 2f); 
gamePort = new ScreenViewport(gameCam); 

奇妙なことに、カメラの高さと幅が何であれ、結果は同じです。リサイズ方法で

は、私は多くのことを試してみました:

@Override 
public void resize(int width, int height) { 
gamePort.update(width, height, true); 
renderer.stage.getViewport().update(width, height, true); 
gameCam.viewportWidth = width; 
gameCam.viewportHeight = height; 
gameCam.update(); 

float aspectRatio = (float) width/(float) height; 
gameCam = new OrthographicCamera(2f * aspectRatio, 2f); 
gameCam.update(); 

は最後に、renderメソッドで:

public void render() {            
    sb.setProjectionMatrix(cam.combined); 
    sb.draw(block.getTexture(), block.getPosition().x, block.getPosition().y, BLOCK_WIDTH, BLOCK_HEIGHT); 

BLOCK_WIDTHとBLOCK_HEIGHT = 48 私のテクスチャは512pxですので、私はしたいですそれらを小さくする。

下の図に示すように、デバイスの解像度が高い場合、ウィンドウのサイズを変更しても、テクスチャのサイズと位置は同じになります。私はステージ上の得点表でこの問題を抱えていません。

enter image description here

答えて

1

リサイズスプライトについての質問はここに答えた:

How to resize a sprite in Libgdx?

をだからではなく、sprite.draw(バッチ)をしてみてください(、...スプライト)をbatch.drawを使用するのではなく、 。

私はLibGDXのステージとアクタを厳密に使用して、コンポーネントのサイズ変更や配置を非常に簡単にします。 ScreenViewportを使用するときは、コンポーネントのサイズを画面サイズの何パーセントかに設定します。これは、さまざまな画面サイズに完全に拡大縮小されます。

たとえば、ボタンを100ピクセル幅でハードコーディングする代わりに、Gdx.graphics.getWidth()* 0.10fに設定し、ボタン幅を画面幅の10%に設定します画面の解像度。

同じことを位置でも実行できます。位置を50ピクセルに設定する代わりに、Gdx.graphics.getWidth()* 0.5fに設定し、次にxの位置は画面幅の%5になります。

ブロックがある種のグリッドで整列される場合、位置指定のための別のオプションはSpriteの代わりにLibGDX Imageを使用することです。 ImageはActorに基づいており、画面のサイズを変更するときに自動的に再配置するテーブルにすべてのブロックを配置することができます。したがって、ブロックは画面上部のスコアとまったく同じように動作します。

+0

私はこれらの変更を試みます。カメラはどうですか?この場合、どのように構成しますか? – JavaDev

+1

私はカメラを直接嫌うことはありません。 Viewportにはカメラがあり、Viewportで行うのはstage.getViewport()。update(width、height、true)です。 resizeメソッドの内部 – Tekkerue

+0

それを宣言するときに、幅や高さを指定しないでください。そして設定しないでください.Ortho? – JavaDev

関連する問題