【问题标题】:FitViewport does not scale actorFitViewport 不缩放演员
【发布时间】:2017-03-05 20:31:03
【问题描述】:

我有FitViewport,虚拟屏幕尺寸为 1920x1080。

viewport = new FitViewport(AssetLoader.VIRTUAL_WIDTH, AssetLoader.VIRTUAL_HEIGHT);
stage = new Stage(viewport);

此外,还有从 Actor 类扩展而来的 TimeBar 类。 TimeBar上市:

public class TimeBar extends Actor {
private Color color;
private ShapeRenderer renderer;
private float time, current;

public TimeBar() {
    color = Color.valueOf(AssetLoader.TIMEBAR_COLOR);
    renderer = new ShapeRenderer();
    renderer.setColor(color.r, color.g, color.b, color.a);

    setBounds(10, 10, 1800, 10); //rectangle is wider than the screen! Why?
}

@Override
public void draw(Batch batch, float parentAlpha) {
    super.draw(batch, parentAlpha);
    batch.end();
    renderer.begin(ShapeRenderer.ShapeType.Line);
    renderer.rect(getX(), getY(), getWidth(), getHeight());
    renderer.end();
    batch.begin();
}
}

我在render 方法中添加了一些日志:

    Gdx.app.log("GameRenderer", "resizing: " + width + " " + height);
    Gdx.app.log("GameRenderer", "world width: " + viewport.getWorldWidth());
    Gdx.app.log("GameRenderer", "stage width: " + stage.getWidth());
    Gdx.app.log("GameRenderer", "Time bar width: " + timeBar.getWidth());

他们说:

GameRenderer: world width: 1920.0
GameRenderer: stage width: 1920.0
GameRenderer: Time bar width: 1800.0

但是矩形比屏幕宽,为什么?

【问题讨论】:

    标签: java libgdx


    【解决方案1】:

    您正在使用预定义的视口创建舞台,因此舞台批次的投影矩阵由舞台视口定义,但是当您创建 ShapeRenderer 时,投影矩阵由Gdx.graphics.getWidth()Gdx.graphics.getHeight() 定义

    将这两行写在draw()方法中。

    renderer.setProjectionMatrix(batch.getProjectionMatrix());
    renderer.setTransformMatrix(batch.getTransformMatrix());
    

    或者你可以使用这个类

    https://github.com/itsabhiaryan/gdx-utils/blob/master/gdx-utils/src/com/ng/gdxutils/actor/ShapeRendererActor.java

    【讨论】:

    • 再次非常感谢。盯着你的回购,将在未来使用
    猜你喜欢
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多