3

libGDX 使用 Stage 和 Actor 在桌面和 Android 手机上产生不同的摄像机角度。

以下是展示问题的图片: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 的世界,无论分辨率如何。(实际上它会“至少”800x600,因为 keepAspectRation = true 可以防止失真)

于 2012-12-18T13:38:45.230 回答