web-dev-qa-db-ja.com

libgdx:spritebatchで描画するときにテクスチャを回転

描画するときにテクスチャを回転させようとしています。 Paint.netで画像を90度回転して別のファイルに保存するよりも、これを行う方が理にかなっていると思いました。私はスプライトバッチ描画引数のAPIドキュメントを考えましたが、理解できません。 srcX、srcY、originXなどの引数がたくさんあります。また、テクスチャ領域に対して同じことをする方法を知りたいです。ここにAPIドキュメントページへのリンクがあります: http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/SpriteBatch.html

ありがとうございました!

13
vedi0boy

もう一度 ドキュメントから ですが、使いやすさのためにここにコピーされているので、少し詳しく説明できます。

x - the x-coordinate in screen space
y - the y-coordinate in screen space

これら2つの値は、画面空間(ゲーム空間)でテクスチャを描画する場所を表します。かなり自明です。

originX - the x-coordinate of the scaling and rotation Origin relative to the screen space coordinates
originY - the y-coordinate of the scaling and rotation Origin relative to the screen space coordinates

これらの2つの値は、画面スペースに対して回転(およびスケーリング)が発生する場所を表します。たとえば、ここで値0、0を指定すると、テクスチャの角の1つを中心に回転とスケーリングが行われ(左下にあると思います)、中心を指定すると(幅/ 2、高さ/ 2) )、回転とスケーリングはテクスチャの中心で発生します(これはおそらく「通常の」回転に必要なものです)

width - the width in pixels
height - the height in pixels

画面上にテクスチャを描画するための寸法。

scaleX - the scale of the rectangle around originX/originY in x
scaleY - the scale of the rectangle around originX/originY in y

長方形のスケールを表す値。0〜1の値は長方形を縮小し、1より大きい値は長方形を拡大します。これは以前に指定したOriginに関するものであることに注意してください。つまり、これが中心でない場合、画像が歪んで見える可能性があります。

rotation - the angle of counter clockwise rotation of the rectangle around originX/originY

画像を回転させる角度。繰り返しますが、これは以前に指定された原点の周りにあるため、原点が画像の中心でない場合、回転が「正しく」表示されない可能性があります

srcX - the x-coordinate in Texel space
srcY - the y-coordinate in Texel space

これらの2つの値は、使用するイメージファイル(.png、.jpgなど)の実際の領域の開始位置です(ピクセル単位)。基本的には画像の始まりです。

srcWidth - the source with in texels
srcHeight - the source height in texels

同様に、これらの2つの値は、使用している画像ファイルの実際の領域の幅と高さ(ピクセル単位)です。

flipX - whether to flip the Sprite horizontally
flipY - whether to flip the Sprite vertically

最後に、これらの2つのブール値は、画像を水平または垂直に反転するために使用されます。

同様の TextureRegionsを描画する方法 にsrcX、srcY、srcWidth、またはsrcHeightがないことに気付くでしょう。これは、それらが テクスチャ領域から作成したときにテクスチャ領域に与える値 であるためです。

基本的にそれが意味することは、コマンド

//with TextureRegions
SpriteBatch.draw(textureRegion, x, y, originX, originY, width, height, scaleX, scaleY, rotation);

に相当

//with Textures from TextureRegions
SpriteBatch.draw(textureRegion.getTexture(), x, y, originX, originY, width, height, scaleX, scaleY, rotation, textureRegion.getRegionX(), textureRegion.getRegionY(), textureRegion.getRegionWidth(), textureRegion.getRegionHeight(), false, false);
63
clearlyspam23