FitViewport does not scale actor

时间秒杀一切 提交于 2019-12-13 10:15:16

问题


I have FitViewport with virtual screen size 1920x1080.

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

Also, there is TimeBar class extended from Actor class. TimeBar listing:

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();
}
}

I've added some logs to render method:

    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());

They said:

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

But rectangle is wider then the screen, why?


回答1:


You're creating Stage with predefined Viewport, so projection matrix of stage's batch is defined by stage viewport but when you create ShapeRenderer then projection matrix is defined by Gdx.graphics.getWidth() and by Gdx.graphics.getHeight()

write these two lines in draw() method.

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

Or you can use this class

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



来源:https://stackoverflow.com/questions/42613593/fitviewport-does-not-scale-actor

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!