2017-02-21 5 views
0

最初に私はそれがすでに多くの話題を持っているが、私はまだ何も理解していない主題であることを知っています。Android搭載のアスペクト比とビューポート:解説が必要

私はAndroid用のゲームを作成しようとしています(Playストアでダウンロードできます)。同じアスペクト比のすべての携帯電話で再生できるゲームを作成するにはどうすればいいですか?

例: プレイヤーのキャラクターにランダムに画面の上からオブジェクトが落ちるゲームを作りたいです。

すべての携帯電話で同じアスペクトの背景画像、プレーヤー画像、落ちるオブジェクト画像を印刷するにはどうすればよいですか?

まず、私はここでbakcgroundイメージ を印刷するには、私が現在持っているものです。

public class MyAwesomeGame extends Game { 
    public SpriteBatch batch; 

    @Override 
    public void create() { 
     batch = new SpriteBatch(); 
     setScreen(new MenuScreen(this)); 
    } 

    @Override 
    public void render() { 
     super.render(); 
    } 

    @Override 
    public void dispose() { 
     batch.dispose(); 
    } 
} 

そして:

public class MenuScreen implements Screen { 

    private MyAwesomeGame game; 

    public MenuScreen(MyAwesomeGame game){ 
     this.game = game; 
    } 

    @Override 
    public void show() {} 

    @Override 
    public void render(float delta) { 
     Gdx.gl.glClearColor(1, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     game.batch.begin(); 
     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() {} 
} 

誰かが私が行うか、私にいくつかを与えるべきか私に説明することができますしてくださいコード?

答えて

1

viewportは実際に必要なものです。 StretchViewportを使用することができるすべてのデバイスで同じアスペクト比のイメージが必要な場合は、デバイスのアスペクト比に基づいて画像を自動的に縮小/拡大しますが、画質は低下します。

FillViewportを使用すると画質が損なわれないようにするには、FitViewportとは対照的に、FitViewportとは対照的に、画面全体が常に満たされます。ビューポートが途切れています。

あなたの背景画像は画面全体を取るしたい場合は、これらのような何か:

int width = Gdx.graphics.getWidth(); \\ get the width of the device 
int height = Gdx.graphics.getHeight(); \\ get the height of the device 

Texture backgroundImage = new Texture(pathName); 
Image image = new Image(backgroundImage); 
image.setSize(width,height); \\ background image will fill up your whole screen 

Image player = new Image(new Texture(pathname)); \\ it's the same as what we did above 

Stage stage = new Stage(new StretchViewport(width,height)); 
stage.addActor(player); \\ add your player and background image to stage 
stage.addActor(image); 

クリックしStretchViewportに2つのパラメータは、幅と高さのベースを伸ばすには約Stage 詳細については、このlinkデバイスのアスペクト比に依存します。

あなたのレンダリングメソッドで、イメージを更新してレンダリングします。

@Override 
    public void render(float delta) { 
    Gdx.gl.glClearColor(1, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    stage.act(); 
    stage.draw(); 
} 

このヘルプが欲しいです!

+0

ありがとう!私が必要とする最後のものは、ロックされたメニューを作るためのパーソナライズされたボタンを作る方法を学ぶことです。私はAndroidで初めてのゲームを完成させます – Kolopox

+1

@lan i間違いがあると思う。デバイスの幅と高さは、image.getWidth()とimage.getHeight()ではなく、Gdx.graphics.getWidth()とGdx.graphics.getHeight()によって計算されます。 – Aryan

+0

@Abhishek Aryanあなたは正しいです。タイルマップを使用すると混乱しているはずです.tiledMapのサイズを画面全体を埋めるように設定することはできず、stretchViewportにタイルマップサイズを使用しています。私は間違っているかもしれません。訂正してくれてありがとう。私はそれを編集した – Sparcsky

0

これはまさにビューポートが使用されているものです。

ビューポートが異なる解像度を処理します。ビューポートの種類とその違いについては、See the Viewport wikiを参照してください。

ビューポートを使い始めるためのチュートリアルもあります。 GameFromScratchには1つしかありませんが、ビューポートにはさらに多くのものがあります。

+0

GameFromScratchのチュートリアルには、「新しいFitViewPort(cam、100,100);」を使用するときに2つの質問があります。 "100"は何ですか?それは写真の大きさですか?そしてそれらはピクセル内にありますか? – Kolopox

関連する問題