如何将SpriteBatch.draw()等效为Sprite.draw()?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将SpriteBatch.draw()等效为Sprite.draw()?相关的知识,希望对你有一定的参考价值。

我通过在精灵上调用draw并在之后调用SpriteBatch上的draw来绘制相同的精灵。

target.sprite.draw(game.batch);

game.batch.draw(target.sprite, target.sprite.getX(), target.sprite.getY(), 
                target.sprite.getOriginX(), target.sprite.getOriginY(),
                target.sprite.getWidth(), target.sprite.getHeight(),
                target.sprite.getScaleX(), target.sprite.getScaleY(),
                target.sprite.getRotation(), false);

...但是第二个调用与第一个相比以90度角绘制精灵。当我减去90度进行补偿时,精灵不对齐,因为它们围绕相对于屏幕的相同点旋转但是相对于它们的不同点(用SpriteBatch.draw()调用绘制的点围绕原点旋转。用Sprite.draw()绘制的那个。

如何进行等效的Sprite.Batch.draw()通话?

答案

从您发布的代码中分辨出来有点棘手,但我认为您正在调用以下函数:

/** Draws a rectangle with the texture coordinates rotated 90 degrees. The bottom left corner at x,y and stretching the region
 * to cover the given width and height. The rectangle is offset by originX, originY relative to the origin. Scale specifies the
 * scaling factor by which the rectangle should be scaled around originX, originY. Rotation specifies the angle of counter
 * clockwise rotation of the rectangle around originX, originY.
 * @param clockwise If true, the texture coordinates are rotated 90 degrees clockwise. If false, they are rotated 90 degrees
 *           counter clockwise. */
public void draw (TextureRegion region, float x, float y, float originX, float originY, float width, float height, float scaleX, float scaleY, float rotation, boolean clockwise);

这里要注意的关键是第四个和第五个参数不是你想要旋转的原点,而是来自该原点的偏移。如果您希望功能与sprite.draw()匹配,则应将0作为originX和originY传递。

如果你想避免90 *旋转(这似乎是非常有意的;我认为你可以将0度或弧度定义为“向上”而不是“正确”,如果这是有意义的话),你应该使用省略最后一个参数(boolean clockwise)的那个函数的重载版本。

你可以在Batch interface的libGDX源代码中找到所有这些(SpriteBatch正在实现)。

以上是关于如何将SpriteBatch.draw()等效为Sprite.draw()?的主要内容,如果未能解决你的问题,请参考以下文章

不正确的SpriteBatch旋转

如何使 Texture2D 50% 透明? XNA

Microsoft Xna Texture2D和旋转

如何将 Python 变量转换为等效的 cobol 组变量?

如何将任何给定的 SQL/HQL 选择查询动态转换为等效计数查询?

如何将密集层转换为 Keras 中的等效卷积层?