当前位置: 首页 > 知识库问答 >
问题:

libgdx:使用spritebatch绘制纹理时旋转纹理

印瑾瑜
2023-03-14

我试图旋转纹理时,我画他们。我认为这样做比在Paint.NET中旋转图像90度并将它们保存在不同的文件中更有意义。我查看了api文档中spritebatch绘图参数,但我就是不明白。有一堆参数,比如srcX、srcY、originX等等。我也想知道如何做同样的纹理区域。以下是api文档页面的链接:http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/spritebatch.html

谢谢!

共有1个答案

漆雕亮
2023-03-14

再次从文档,但复制在这里方便使用,这样我可以解释得更好一点。

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

这两个值表示在屏幕空间(游戏空间)中绘制纹理的位置。很不言自明。

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

这两个值表示相对于屏幕空间发生旋转(和缩放)的位置。例如,如果你在这里给出0,0,旋转和缩放将发生在纹理的一个角(我想是左下角)周围,而如果你给出中心(宽度/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
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

这两个值是希望使用的图像文件实际区域(.png、.jpg等)的起始位置,以像素为单位。基本上是你形象的开始。

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

同样,这两个值是您正在使用的图像文件的实际区域的宽度和高度,以像素为单位。

flipX - whether to flip the sprite horizontally
flipY - whether to flip the sprite vertically
//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);
 类似资料:
  • 我在MyGdxGame中的render方法看起来是这样的,调用舞台绘制自己(连同它的演员),然后我尝试绘制一组纹理以供调试之用。 舞台和它的一个演员一起绘制,但其他的纹理没有被绘制。 我试过的:在舞台相机上设置批处理投影矩阵(在调用之后),确保纹理坐标应该是可见的。

  • 如果我创建一个.png 1024 x 1024的纹理,并在中间画一个124 x 124的圆,它的周围将是空的,它使用的RAM是否与我在124x124空间上画一个124 x 124的圆相同?

  • 更新1 如您所见,在FrameBuffer上绘制的LibGDX纹理,与直接在SpriteBatcher上绘制的纹理相比,在SpriteBatcher上绘制的纹理要比原始纹理暗一些。 左侧为原图,比手机1080x1920屏幕小50%。 右侧部分是先在FrameBuffer上绘制的TextureRegion,然后在SpriteBatch上绘制,如下代码所示: 如你所见,它比直接从纹理绘制的图像暗一点。

  • 我正在绘制一个纹理四边形,但使用的纹理是以前绑定的纹理,即使我试图绑定一个新纹理。 在GuiHandler中创建纹理。Java语言 渲染代码 有人知道为什么使用先前绑定的纹理而不是正确的纹理吗?P、 我正在使用LWJGL

  • 我以前做了几个实验,以找到绘制大规模六边形网格的最佳方法。 我尝试使用、绘制hexes。它在小网格中工作得很好,但如果我在一个网格中有超过1000+的单元格,fps就开始很难下降。 所以我想出了这个想法,将纹理(包含六边形网格模式)应用到一个简单的平面上。我只需要设置纹理的函数来指定垂直和水平执行多少次重复。

  • 我希望你能帮我找到错误。干杯,Joshflux 编辑:我很确定,它必须做一些事情与窗口的大小。如果我将窗口的高度从800调整为200,那么左角的人看起来是一样的,但是中间的人要小得多。但还是不知道怎么解决...