3

Stage と Actor を使用する libGDX は、デスクトップと Android Phone で異なるカメラ アングルを生成します。

ここに問題を示す写真があります: http://brandonyuh.minus.com/mFpdTSgN17VUq

デスクトップ バージョンでは、画像がほぼすべての画面を占めます。Android フォンでは、画面の一部しか占有しません。

コードは次のとおりです(実際のプロジェクトではありませんが、問題を特定しました):

package com.me.mygdxgame2;
import com.badlogic.gdx.*;
import com.badlogic.gdx.graphics.*;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.graphics.g2d.*;
import com.badlogic.gdx.scenes.scene2d.*;
public class MyGdxGame2 implements ApplicationListener {
    private Stage stage;
    public void create() {
        stage = new Stage();
        stage.addActor(new ActorHi());
    }
    public void render() {
        Gdx.gl.glClearColor(0, 1, 0, 1);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
        stage.draw();
    }
    public void dispose() {}
    public void resize(int width, int height) {}
    public void pause() {}
    public void resume() {}
    public class ActorHi extends Actor {
        private Sprite sprite;
        public ActorHi() {
            Texture texture = new Texture(Gdx.files.internal("data/hi.png"));
            texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
            sprite = new Sprite(new TextureRegion(texture, 0, 0, 128, 128));
            sprite.setBounds(0, 0, 300.0f, 300.0f);
        }
        public void draw(SpriteBatch batch, float parentAlpha) {
            sprite.draw(batch);
        }
    }
}

hi.png は上記のリンクに含まれています

私の質問に答えてくれてありがとう。私はそれを理解しようとして3日間を費やしました。

4

1 に答える 1

1
 stage = new Stage(); 

ビューポートを実際の画面解像度にマップするカメラでステージを初期化します。デスクトップとデバイスの解像度が同じでない場合、それらは同じように見えません。ステージに固定値を設定してみてください。これを使用してください:(ここでjavadocを確認できます

public void setViewport (float width, float height, boolean keepAspectRatio);

例えば。setViewport (800, 600, true); のような固定値を使用します。

これも画面いっぱいに表示されますが、解像度に関係なく、常に 800x600 の世界が表示されます。(実際には、歪みを防ぐ keepAspectRation = true のため、「少なくとも」800x600 になります)

于 2012-12-18T13:38:45.230 に答える