Java 场景2D坐标

Java 场景2D坐标,java,libgdx,Java,Libgdx,我在游戏中使用Scene2D功能。我有一个虚拟屏幕大小为1920x1080的FitViewport viewport = new FitViewport(AssetLoader.VIRTUAL_WIDTH, AssetLoader.VIRTUAL_HEIGHT); stage = new Stage(viewport); 此外,还有从Actor类扩展而来的MyActor类MyActor构造函数: public MyActor(String text, float x, float y) {

我在游戏中使用
Scene2D
功能。我有一个虚拟屏幕大小为1920x1080的
FitViewport

viewport = new FitViewport(AssetLoader.VIRTUAL_WIDTH, AssetLoader.VIRTUAL_HEIGHT);
stage = new Stage(viewport);
此外,还有从
Actor
类扩展而来的
MyActor
类<代码>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
方法是位于左上角还是坐标有问题

只需添加演员身高即可解决您的问题

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();
}
私人集装箱;
@凌驾
公共void create(){
阶段=新阶段();
FreeTypeFontGenerator=新的FreeTypeFontGenerator(AssetLoader.robotoFontFile);
FreeTypeFontGenerator.FreeTypeFontParameter参数=新的FreeTypeFontGenerator.FreeTypeFontParameter();
参数.size=96;
font=generator.generateFont(参数);
generator.dispose();
Label label1=新标签(“测试文本”,新标签.LabelStyle(字体,颜色.黑色));
容器=新容器(标签1);
container.setTransform(true);//用于启用缩放和旋转
容器.尺寸(100,60);
container.setOrigin(container.getWidth()/2,container.getHeight()/2);
容器设置位置(100200);
container.setScale(3);//根据您的要求进行缩放
stage.addActor(容器);
}
@凌驾
公共无效呈现(){
super.render();
Gdx.gl.glClearColor(1,1,1,1);
gl.glClear(GL20.gl\u颜色\u缓冲\u位);
stage.draw();
舞台表演;
}

请记住,您正在为每个单独的字体角色创建字体,这并不好,请创建一次字体并将其传递给所有字体角色。

谢谢!你能解释一下为什么缩放和旋转不起作用吗?当你缩放或旋转时,只有你的演员被缩放或旋转,但对于字体演员来说,演员只是一个模型,它的视图是字体,这不会影响Hanks,现在很清楚了。也许,你能帮我解决另一个问题,好吗?