如何反复填充libgdx体的纹理?

时间:2017-07-13 07:04:15

标签: java android libgdx

我知道我可以使用PolygonRegion来做这件事,但问题是我使用scene2d.Stage和几个演员。您可能知道阶段使用SpriteBatch而我无法渲染PolygonRegion(方法batch.draw(polygonRegion)不存在)。

我想要的结果:

enter image description here

当我输入我的Actor的绘图方法时,这段代码:

polygonSpriteBatch.begin();
polygonSpriteBatch.draw(polygonRegion, getX(), getY(), getWidth(), getHeight());
polygonSpriteBatch.end();

我得到这样的东西:

enter image description here

1 个答案:

答案 0 :(得分:3)

据我所知,您应该在Stage PolygonSpriteBatch调用的顶部使用draw(..),我的意思是将PolygonSpriteBatch用于2D地形。

如果您所需的Actor/Image是矩形大小,那么您可以包裹纹理:

Texture texture=new Texture("tex1.png");
texture.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat);
textureRegion=new TextureRegion(texture,300,300); 

创建PolygonSpriteBatch对象并传入Stage的构造函数。

stage=new Stage(new ScalingViewport(Scaling.stretch, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), new OrthographicCamera()),new PolygonSpriteBatch());

为了更具凝聚力,您可以通过继承创建自己的舞台。

然后创建Actor类来处理/绘制特定纹理图像的PolygonRegion

public class PolyActor extends Actor {

  PolygonRegion polygonRegion;

  public PolyActor(PolygonRegion region){
      this.polygonRegion=region;
  }

  @Override
  public void draw(Batch batch, float parentAlpha) {

    Color color = getColor();
    batch.setColor(color.r, color.g, color.b, color.a * parentAlpha);
    ((PolygonSpriteBatch)batch).draw(polygonRegion,getX(),getY());
  }
}

创建PolyActor并添加到舞台,下面是我的测试代码和输出:

float a = 100;
float b = 100;

PolygonRegion polygonRegion=new PolygonRegion(textureRegion,new float[] {
            a*0, b*0,
            a*0, b*2,
            a*1, b*2,
            a*1.5f, b*1.5f,
            a*3, b*1.5f,
            a*3.5f, b*1,
            a*4, b*1,
            a*4.5f, b*1.5f,
            a*5f, b*1.5f,
            a*5f, b*0f},new short[] {
            0, 1, 2,1,2,3,0,2,3,0,3,4,0,4,5,0,5,6,0,6,9,6,7,9,7,8,9
 });

 PolyActor polyActor =new PolyActor(polygonRegion);
 polyActor.setPosition(75,0);
 stage.addActor(polyActor);

我使用的纹理:

enter image description here

我的预期输出:

enter image description here

修改

Texture只不过是GPU内存中的2D字节数组。这个2D数组有大小,这些字节通常被解释为颜色。字节数据的缩放不会产生场景,但你几乎可以按照你想要的方式使用这些数据。

您可以通过Pixmap创建自己的缩放纹理:

Pixmap originalPix = new Pixmap(Gdx.files.internal("badlogic.jpg"));  // 256 * 256
Pixmap scaledPix = new Pixmap(700, 700, originalPix.getFormat());
scaledPix.drawPixmap(originalPix, 0, 0, originalPix.getWidth(), originalPix.getHeight(), 0, 0, scaledPix.getWidth(), scaledPix.getHeight());
Texture texture = new Texture(scaledPix);  // 400 * 400
originalPix.dispose();
scaledPix.dispose();