【问题标题】:Scene2D coordinates场景二维坐标
【发布时间】:2017-03-05 14:09:37
【问题描述】:

我在我的游戏中使用Scene2D 功能。我有FitViewport,虚拟屏幕尺寸为 1920x1080。

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 方法是占据左上角的位置还是坐标有问题?

【问题讨论】:

    标签: java libgdx


    【解决方案1】:

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

    font.draw(batch, text, getX(), getY()+ getHeight());
    

    但是你的 Actor 的字体不够好,你只能改变位置。旋转和缩放对此不起作用。

    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。

    【讨论】:

    • 谢谢!你能解释一下,为什么缩放和旋转不起作用?
    • 当你缩放或旋转时,只有你的 Actor 被缩放或旋转,但对于 Font Actor,Actor 只是一个模型,它的视图是字体,不会受到影响
    • 谢谢,现在很清楚了。也许,你可以解决我的另一个问题,好吗? stackoverflow.com/questions/42613593/…
    猜你喜欢
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    相关资源
    最近更新 更多