首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scene2D坐标

Scene2D坐标
EN

Stack Overflow用户
提问于 2017-03-05 14:09:37
回答 1查看 162关注 0票数 1

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

代码语言:javascript
复制
viewport = new FitViewport(AssetLoader.VIRTUAL_WIDTH, AssetLoader.VIRTUAL_HEIGHT);
stage = new Stage(viewport);

此外,还有从MyActor类扩展的Actor类。MyActor构造函数:

代码语言:javascript
复制
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()方法:

代码语言:javascript
复制
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方法是左上角的位置,还是坐标有问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-05 19:26:08

简单地增加演员的高度,解决你的问题。

代码语言:javascript
复制
font.draw(batch, text, getX(), getY()+ getHeight());

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

代码语言:javascript
复制
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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42609364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档