【问题标题】:Actor's position is wrong when setFillParent is true, in LibGDX在 LibGDX 中 setFillParent 为 true 时,演员的位置是错误的
【发布时间】:2017-10-22 17:32:34
【问题描述】:

我已经花了好几个小时试图解决这个问题并且快要疯了,请看看我的问题。

说明问题的图片:

Image illustrating this

  • exitButtonsetFillParent函数设置为false时 结果是图像的右侧,按钮居中 在Container里面但是大小不对。

  • exitButtonsetFillParent函数设置为true时 结果是图像的左侧,按钮大小正确 但是位置不对。

代码如下:

    Container container = new Container(exitButton);

    container.fill();

    container.setRound(false);

    container.setSize(buttonSize, buttonSize);

    exitButton.setFillParent(true);

    //exitButton.setFillParent(false);

    container.setPosition(
            ((float)viewportWidth/7f) - (buttonSize/2f)
            ,((float)viewportHeight*5f/6f)  - (buttonSize/2f)
    );

【问题讨论】:

  • this 问题是怎么回事,看起来很相似
  • 使用scale 代替resize 也可以为容器启用转换。

标签: java layout libgdx actor stage


【解决方案1】:

小部件的大小由其父级设计。 setFillParent(true) 允许小部件覆盖它并设置自己的大小(以匹配其父级的大小)。除非它是层次结构的顶级小部件,否则您永远不想这样做,因为当小部件控制自己的大小时,它的父级将失去正确定位它的能力。

至于为什么按钮被绘制得比容器大,如果子的minWidth/minHeight比父的大,就会发生这种情况。假设exitButton 是一个ImageButton 或只是一个Button,这意味着它的Image 或背景的drawable 大于buttonSize

解决此问题的最简单方法是覆盖 getMinWidth()getMinHeight() 以返回零。例如:

exitButton = new Button(skin, style){
    public float getMinWidth(){return 0;}
    public float getMinHeight(){return 0;}
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多