簡體   English   中英

Scene2D坐標

[英]Scene2D coordinates

我在游戲中使用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僅在我觸摸綠色矩形內部InputListener處理輸入。

那么,問題出在哪里呢? BitmapFont draw方法占據左上角的位置,還是坐標有些麻煩?

只需添加演員高度即可解決您的問題。

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM