从视口

时间:2016-10-07 08:01:21

标签: java libgdx

我在屏幕上绘制一些文字时遇到问题,我发现根据视口大小,尽管计算坐标作为屏幕的中心,但文本可能会脱离显示。这是代码,它是一个稍微修改过的项目,默认情况下由libgdxgenerator创建:

package net.iberdroid.libgdxtestfonts;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.utils.viewport.FitViewport;
import com.badlogic.gdx.utils.viewport.Viewport;

public class LibGdxTestFonts extends ApplicationAdapter {
    SpriteBatch batch;
    Texture img;
    BitmapFont defaultFont;
    private OrthographicCamera camera;
    private Viewport viewport;
    private float textY;
    private float textX;

    @Override
    public void create() {
        camera = new OrthographicCamera();
        viewport = new FitViewport(
                640,
                480,
                camera);
        camera.setToOrtho(false);
        batch = new SpriteBatch();
        img = new Texture("badlogic.jpg");
        defaultFont = new BitmapFont();
        textX = viewport.getWorldWidth() / 2;
        textY = viewport.getWorldHeight() / 2;
    }

    @Override
    public void render() {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.setProjectionMatrix(camera.combined);
        defaultFont.setColor(Color.WHITE);
        Gdx.app.log("render", String.format("TextX: %f TextY: %f", textX, textY));
        defaultFont.draw(batch, "HELLO WORLD!", textX, textY);
        batch.end();
    }

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

据我了解,那应该画一个你好世界!文本从屏幕中心开始。它实际上是以视口大小来实现的。现在,如果您尝试使用更大的视口,让我们说800x600,文本将移动到右侧和顶部,如果尝试使用更高的值,它将成为文本将通过屏幕边界移出的点。右上角。

同样的情况发生在相反的方向。您尝试的视口较小,距离中心越远,越接近左下角,文本将出现,直到它最终走出边界。

所以要么我在这里没有掌握一些东西,要么BitMap.draw方法似乎忽略了视口大小并使用了其他我无法弄清楚的东西。

如果其他人这样做,请告诉我。

提前多多感谢!

P.S。我也尝试过使用Hiero生成的字体并遇到同样的问题。

1 个答案:

答案 0 :(得分:0)

添加这个似乎解决了这个位置的问题,虽然我仍然存在规模问题,但这是一个不同的问题。

@Override public void resize (int width, int height) {
    viewport.update(width, height, true);
}