FitViewport不缩放actor [英] FitViewport does not scale actor

查看:146
本文介绍了FitViewport不缩放actor的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have FitViewport with virtual screen size 1920x1080.

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

此外,还有从Actor类扩展的TimeBar类. TimeBar列表:

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

我已经向render方法中添加了一些日志:

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

他们说:

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

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

But rectangle is wider then the screen, why?

推荐答案

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

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

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

这篇关于FitViewport不缩放actor的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆