私はPolygonRegion
を使用してこのthroghを行うことができますが、問題は私がscene2d.Stage
と少数の俳優を使用していることです。多分ステージがSpriteBatch
を使用していて、PolygonRegionをレンダリングできないことを知っています(メソッドbatch.draw(polygonRegion)は存在しません)。libgdx本体にテクスチャを繰り返し埋め込む方法は?
私が欲しい結果:
私は俳優のdrawメソッドでこのコード入れた場合:
私はPolygonRegion
を使用してこのthroghを行うことができますが、問題は私がscene2d.Stage
と少数の俳優を使用していることです。多分ステージがSpriteBatch
を使用していて、PolygonRegionをレンダリングできないことを知っています(メソッドbatch.draw(polygonRegion)は存在しません)。libgdx本体にテクスチャを繰り返し埋め込む方法は?
私が欲しい結果:
私は俳優のdrawメソッドでこのコード入れた場合:
polygonSpriteBatch.begin();
polygonSpriteBatch.draw(polygonRegion, getX(), getY(), getWidth(), getHeight());
polygonSpriteBatch.end();
を私はこのような何かを得ます
私によると、あなたはすべきですStage
の先頭がPolygonSpriteBatch
draw(..)
となります。つまり、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);
テクスチャ:
そして、私の予想される出力:
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();
ありがとうございます:) – RedLipsAlwaysLie
PolygonRegionにあるテクスチャのスケール方法も教えてください。 – RedLipsAlwaysLie
'PolygonSpriteBatch'の' draw'メソッドがオーバーロードされています。スケーリング係数を持つメソッドを使用してください。 – Aryan
Scene2DがSpriteBatchを使用する必要はありません。 PolygonSpriteBatchをStageコンストラクタに渡すと、それが使用されます。矩形スプライトの描画では、ステージの効率が多少低下しますが、ほとんどの場合、ステージは重要ではありません。アクタの描画メソッドでBatch to PolygonSpriteBatchをキャストすることができます。 – Tenfour04