为什么带有多边形的actor在libgdx中没有正常填充?

时间:2017-11-21 03:20:47

标签: java libgdx scene2d

所以这里有两个例子,我在表中有两个图像,但大小不同。一个使用Texture的示例和另一个使用多边形的示例之间的唯一区别。

  1. 纹理 x.png为130x130,y.png为75x75

    Image image1 = new Image(new TextureRegionDrawable(new TextureRegion(new Texture("y.png"))));
    Image image2 = new Image(new TextureRegionDrawable(new TextureRegion(new Texture("x.png"))));
    mainTable.setFillParent(true);
    mainTable.row();
    mainTable.add(image1).uniform().fill();
    mainTable.add(image2).uniform();
    mainTable.pack();
    
  2. 输出:

    textures

    正如您所看到的那样,第一张图片被填充到第二张图片,但是在底座中它们的尺寸不同。

    1. 多边形

      Image image1 = new Image(new PolygonRegionDrawable(new PolygonRegion(getSolidTexture(Color.YELLOW), new float[]{0, 0, 75, 75, 0, 75, 75, 0}, new short[]{0, 1, 2, 0, 3, 2})));
      Image image2 = new Image(new PolygonRegionDrawable(new PolygonRegion(getSolidTexture(Color.YELLOW), new float[]{0, 0, 130, 130, 0, 130, 130, 0}, new short[]{0, 1, 2, 0, 3, 2})));
      mainTable.setFillParent(true);
      mainTable.row();
      mainTable.add(image1).uniform().fill();
      mainTable.add(image2).uniform();
      mainTable.pack();
      
    2. ,其中

          public TextureRegion getSolidTexture(Color color) {
              Pixmap p = new Pixmap(1, 1, RGBA8888);
              p.setColor(color);
              p.fill();
              Texture t = new Texture(p);
              return new TextureRegion(t);
          }
      

      输出中:

      polygon

      如您所见,第一张图像未填充到第二张图像尺寸。

      实际上为什么多边形的行为不一样?

1 个答案:

答案 0 :(得分:0)

正如我所知,PolygonRegion的大小必须与顶点大小相同,之后才会缩放。

在我的代码中,我只需要将顶点数组缩放到与pixmap相同的大小。

    float[] vertices1 = {0, 0, 75, 75, 0, 75, 75, 0};
    vertices1 = GeometryUtils.scale(vertices1, 0, 0, 1, 1);
    Image image1 = new Image(new PolygonRegionDrawable(new PolygonRegion(resources.getSolidTexture(Color.YELLOW), vertices1, new short[]{0, 1, 2, 0, 3, 2})));
    float[] vertices2 = {0, 0, 130, 130, 0, 130, 130, 0};
    vertices2 = GeometryUtils.scale(vertices2, 0, 0, 1, 1);
    Image image2 = new Image(new PolygonRegionDrawable(new PolygonRegion(resources.getSolidTexture(Color.YELLOW), vertices2, new short[]{0, 1, 2, 0, 3, 2})));
    mainTable.setFillParent(true);
    mainTable.row();
    mainTable.add(image1).uniform().fill();
    mainTable.add(image2).uniform();
    mainTable.pack();

至少在我看来,我根本无法在谷歌或互联网上找到这些信息。绝望后,我在调试时找到了解决方案。