优先使用viewPort来处理textButton libgdx

时间:2016-08-30 16:41:38

标签: libgdx viewport

我使用新游戏,我为现实世界创建了2个相机一个相机,为静态分辨率创建了另一个(GUI)相机(800 x 480)

    fitViewPort=new FitViewport(Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
    gameController.stage=new Stage(fitViewPort);

我想在游戏中使用textButton,所以我使用新的fitViewPort创建了一个新的舞台

static async Task getAllRecords()
{
    var builder = Builders<HeavyMetalRecordDocument>.Filter;
    //var filter;

    using (var cursor = await ThrashMetalDocumentsCollection.Find()
    .Sort(Builders<HeavyMetalRecordDocument>.Sort.Ascending(x => x.rating))
    .ToCursorAsync()) 
    {
        while (await cursor.MoveNextAsync())
        {
            foreach (var doc in cursor.Current)
            {
                //Do Something…
            }
        }
    }
}

public class HeavyMetalRecordDocument
{
    public ObjectId Id { get; set; }
    public String artist { get; set; }
    public String title { get; set; }
    public DateTime releaseDate { get; set; }
    public int rating { get; set; } // 1-10
}

然后我使用我的位图字体创建我的textButtons,我在桌面上尝试它,这很棒 desktop

但是当我尝试其他设备时,位置不一样 Tablet

然后我认为使用cameraGui宽度和高度为我的视口,字体是非常糟糕的拉伸

任何帮助请:(

1 个答案:

答案 0 :(得分:0)

请勿为GUI创建特殊相机,因为视口已有相机。

根据您的情况确定视口宽度和高度:

fitViewPort = new FitViewport(800, 480);
gameController.stage = new Stage(fitViewPort);

然后只需将actor添加到舞台并通过调用方法

绘制它
gameController.stage.draw();

注意:请务必在调整大小方法中添加gameController.stage.getViewport().update(width, height);

编辑:使用小的固定视口(800x480很小)会导致缩放,这就是字体被拉伸的原因。例如,如果您在1920x1080显示器上运行800x480布局,它将缩放225%。

您可以做的是生成一个大尺寸的字体,并设置其数据fe的缩放比例。 bitmapFont20.getData().setScale(0.5F);(在这种情况下,字体由FreeTypeFontGenerator生成,大小为40)。使用这个技巧你将获得很好的结果。证据如下。它是640x360F * (float) Gdx.graphics.getHeight() / (float) Gdx.graphics.getWidth()的视口,缩放到1920x1080。生成大小为72的字体,然后将数据比例设置为0.5F

Method proff

这是相同的文字,但未修改数据比例。

Without method