2017-07-13 1 views
1

私はPolygonRegionを使用してこのthroghを行うことができますが、問題は私がscene2d.Stageと少数の俳優を使用していることです。多分ステージがSpriteBatchを使用していて、PolygonRegionをレンダリングできないことを知っています(メソッドbatch.draw(polygonRegion)は存在しません)。libgdx本体にテクスチャを繰り返し埋め込む方法は?

私が欲しい結果:

enter image description here

私は俳優のdrawメソッドでこのコード入れた場合:

enter image description here

+0

Scene2DがSpriteBatchを使用する必要はありません。 PolygonSpriteBatchをStageコンストラクタに渡すと、それが使用されます。矩形スプライトの描画では、ステージの効率が多少低下しますが、ほとんどの場合、ステージは重要ではありません。アクタの描画メソッドでBatch to PolygonSpriteBatchをキャストすることができます。 – Tenfour04

答えて

2

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

を私はこのような何かを得ます

私によると、あなたはすべきですStageの先頭がPolygonSpriteBatchdraw(..)となります。つまり、2D地形にはPolygonSpriteBatchを使用します。あなたのあなたは、あなたのテクスチャをラップすることができActor/Imageが矩形サイズである必要があれば

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

PolygonSpriteBatchオブジェクトを作成し、ステージのコンストラクタに渡します。

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

継承性を高めるために、継承によって独自のステージを作成できます。

次に、特定のテクスチャ画像のPolygonRegionを処理/描画するActorクラスを作成します。

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

EDIT

Textureは、GPUメモリにおけるバイトの二次元アレイに過ぎません。この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(); 
+1

ありがとうございます:) – RedLipsAlwaysLie

+0

PolygonRegionにあるテクスチャのスケール方法も教えてください。 – RedLipsAlwaysLie

+0

'PolygonSpriteBatch'の' draw'メソッドがオーバーロードされています。スケーリング係数を持つメソッドを使用してください。 – Aryan

関連する問題