我在游戏中使用Scene2D功能。我有虚拟屏幕大小为1920x1080的FitViewport。
viewport = new FitViewport(AssetLoader.VIRTUAL_WIDTH, AssetLoader.VIRTUAL_HEIGHT);
stage = new Stage(viewport);此外,还有从MyActor类扩展的Actor类。MyActor构造函数:
public MyActor(String text, float x, float y) {
this.text = text;
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(AssetLoader.robotoFontFile);
FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
parameter.size = 96;
font = generator.generateFont(parameter);
generator.dispose();
layout = new GlyphLayout();
layout.setText(font, text);
super.setBounds(x, y, layout.width, layout.height);
this.debug();
renderer = new ShapeRenderer();
this.addListener(new InputListener(){
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
Gdx.app.log("MyActor", text + " is touched!");
return true;
}
});
}MyActor覆盖了draw()方法:
public void draw(Batch batch, float parentAlpha) {
super.draw(batch, parentAlpha);
batch.end();
renderer.begin(ShapeRenderer.ShapeType.Line);
this.drawDebugBounds(renderer);
renderer.end();
batch.begin();
font.draw(batch, text, getX(), getY());
}当我跑步的时候,我得到了这个:

InputListener只在我触摸绿色矩形内时处理输入,尽管文本上有预期的触摸。
那么,问题在哪里?BitmapFont draw方法是左上角的位置,还是坐标有问题?
发布于 2017-03-05 19:26:08
简单地增加演员的高度,解决你的问题。
font.draw(batch, text, getX(), getY()+ getHeight());但是你的演员对于字体不够好,只能改变位置。旋转和缩放不起作用。
private Container<Label> container;
@Override
public void create() {
stage=new Stage();
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(AssetLoader.robotoFontFile);
FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
parameter.size = 96;
font = generator.generateFont(parameter);
generator.dispose();
Label label1 = new Label("Test text", new Label.LabelStyle(font, Color.BLACK));
container=new Container<Label>(label1);
container.setTransform(true); // for enabling scaling and rotation
container.size(100, 60);
container.setOrigin(container.getWidth() / 2, container.getHeight() / 2);
container.setPosition(100,200);
container.setScale(3); //scale according to your requirement
stage.addActor(container);
}
@Override
public void render() {
super.render();
Gdx.gl.glClearColor(1,1,1,1);
gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.draw();
stage.act();
}请记住,您正在为每个单独的字体Actor创建字体,这是不好的,创建一次字体并将其传递给所有的字体Actor。
https://stackoverflow.com/questions/42609364
复制相似问题