1

私がこれを行うとき:

SpriteBatch spriteBatch = new SpriteBatch();
spriteBatch.setProjectionMatrix(new Matrix4().setToOrtho(0, 320, 0, 240, -1, 1));
spriteBatch.begin();
spriteBatch.draw(textureRegion, 0, 0);
spriteBatch.end();

SpriteBatchtextureRegion画面全体に指定した座標系 320-240 に を描画します。同じ座標系 320 240で画面の左半分だけに描画したいとします(つまり、すべてが左側で水平方向に縮小され、画面の右半分は黒のままになります)、どうすればよいでしょうか?

4

4 に答える 4

6

ScissorStack を使用したいと思うでしょう。事実上、描画する四角形を定義します。すべての描画は、定義した四角形になります。

Rectangle scissors = new Rectangle(); 
Rectangle clipBounds = new Rectangle(x,y,w,h);
ScissorStack.calculateScissors(camera, spriteBatch.getTransformMatrix(), clipBounds, scissors); 
ScissorStack.pushScissors(scissors); 
spriteBatch.draw(...); 
spriteBatch.flush();    
ScissorStack.popScissors();

これにより、レンダリングが四角形「clipBounds」の境界内に制限されます。複数の長方形をプッシュすることもできます。すべての長方形内にあるスプライトのピクセルのみがレンダリングされます。

http://code.google.com/p/libgdx/wiki/GraphicsScissorsから

于 2013-09-09T15:40:27.613 に答える
1

バッチをレンダリングする前に、特定の画面領域に描画するようにビューポートを設定できます。重要な行は次のとおりです。

Gdx.gl.glViewport(x, y, w, h);

ビューポートは通常、x = 0 および y = 0 から始まり、画面の幅と高さ全体に拡張されます。元のビューポートの一部だけを見たい場合は、サイズと開始位置の両方を変更する必要があります。画面の左半分にのみ描画するには、次を使用します。

x = 0;
y = 0;
w = Gdx.graphics.getWidth()/2;
h = Gdx.graphics.getWidth();

私はここで解決策を見つけ、最初はこの質問にもう少し複雑な問題に答えましたが、テクニックは同じです。

ビューポートの別の部分に焦点を合わせるには、それに応じて x、y、w、および h を選択するだけです。通常の方法でさらにレンダリングを行う場合は、ビューポートを元の x、y、w、および h の値にリセットしてください。

于 2014-11-16T19:28:49.627 に答える
0

おそらく私は質問を誤解していますが、ビューポートの幅を 320 ではなく 640 に設定して、2 倍にすることはできませんか?

SpriteBatch spriteBatch = new SpriteBatch;
spriteBatch.setProjectionMatrix(new Matrix4().setToOrtho(0, 640, 0, 240, -1, 1));
spriteBatch.begin();
spriteBatch.draw(textureRegion, 0, 0);
spriteBatch.end();
于 2013-09-09T21:14:06.447 に答える
0

あなたはどちらかできます

  • のビューポート幅の 2 倍SpriteBatch
  • a を使用し、Spriteその幅スケールを0.5fに設定し(原点に注意してください)、そのdraw(SpriteBatch)メソッドを使用して描画します。
于 2013-09-10T09:06:40.887 に答える