我在屏幕上绘制一些文字时遇到问题,我发现根据视口大小,尽管计算坐标作为屏幕的中心,但文本可能会脱离显示。这是代码,它是一个稍微修改过的项目,默认情况下由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生成的字体并遇到同样的问题。
答案 0 :(得分:0)
添加这个似乎解决了这个位置的问题,虽然我仍然存在规模问题,但这是一个不同的问题。
@Override public void resize (int width, int height) {
viewport.update(width, height, true);
}