在我的854 x 480 LG Leon上渲染得很好,但在更大的屏幕分辨率(2560 x 1440)上会发生这种情况:http://imgur.com/a/rcbJK。
处理文字的代码是:http://imgur.com/a/c316e。
我已经尝试扩展Label的边界,因为我认为它可能会限制文本,但它仍然无法正常显示。
导致这种情况的原因是什么?
答案 0 :(得分:0)
您应该使用Scene2D和ViewPort。
另外,请注意使用坐标(即:x:64,y:在每种不同的屏幕尺寸上进行32次更改)
答案 1 :(得分:0)
当您在多个设备上运行游戏时,这是常见问题。因为您的游戏在不同的屏幕中以不同的宽高比运行。它通常被称为多屏幕问题。为了解决这个问题,libgdx在类上提供了一个名为viewPort的方法。主要是你可以看到三个viewpors。 1)填充viewPort。 2)适合viewPort。 3)拉伸视口。 有关更多详细信息,您可以阅读libgdx文档。在这里我发布一些示例代码,可以解决您的多屏幕问题。
public class myGame extends ApplicationAdapter {
public OrthographicCamera camera;
public Viewport viewPort;
private SpriteBatch batch;
private BitmapFont myScoreFont;
//一般屏幕分辨率 public int APP_WIDTH = 1280; public int APP_HEIGHT = 800; public int fontPositionIn_X = 600; public int fontPositionIn_Y = 400; public myGame(){
}
@Override
public void create() {
myScoreFont = new BitmapFont(Gdx.files.internal(Constants.PATH_TO_MY_SCORE_FONT), true);
batch = new SpriteBatch();
float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();
camera = new OrthographicCamera();
camera.position.set(0, 0, 0);
camera.update();
camera.setToOrtho(false, APP_WIDTH, APP_HEIGHT);
viewPort = new fillViewPort(1280, 800, camera);
}
@Override
public void dispose() {
batch.dispose();
}
@Override
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);
float deltaTime = Gdx.graphics.getDeltaTime();
batch.setProjectionMatrix(camera.combined);
batch.begin();
myScoreFont.draw(batch,"any texts", fontPositionIn_X, fontPositionIn_Y)
batch.end();
}
@Override
public void resize(int width, int height) {
viewPort.update(width, height);
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}
所以通过使用viewPort,您可以在所有不同的屏幕上玩游戏。
答案 2 :(得分:0)
不同的手机屏幕尺寸有不同的宽高比。这就是它显示不同屏幕的原因。要避免此问题,您必须使用viewPort。因此,您将能够处理不同的屏幕尺寸。有关更多详细信息,您必须阅读libgdx文档。在这里,我发布了一个示例代码,可以帮助您处理不同的屏幕大小。有三种视口主要使用 1)fillviewport 2)fitviewPort 3)stretchviewport 这里是详细的文档。
public class myGame extends ApplicationAdapter {
public OrthographicCamera camera;
public Viewport viewPort;
private SpriteBatch batch;
public myGame() {
}
@Override
public void create() {
float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();
camera = new OrthographicCamera();
camera.position.set(0, 0, 0);
camera.update();
camera.setToOrtho(false, 1280, 800);
viewPort = new FillViewport(1280, 800, camera);
}
@Override
public void dispose() {
batch.dispose();
}
@Override
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);
float deltaTime = Gdx.graphics.getDeltaTime();
batch.setProjectionMatrix(camera.combined);
batch.begin();
batch.draw(sprie,0,0)
batch.end();
}
@Override
public void resize(int width, int height) {
viewPort.update(width, height);
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}
// don't copy paste it . just try to understand and implement it.