gpt4 book ai didi

java - libgdx spritebatch 不基于纹理的原点绘制

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:26 25 4
gpt4 key购买 nike

我在这里绘制了一组 Sprite ,在缩小时使用较小的 (4x4) 纹理,在放大时使用较大的 (16x16) 纹理。当缩放级别达到阈值时,就会发生交换。

然而,为了实现平滑过渡, Sprite (位于 [x,y] 处)需要以 Sprite 的中心为原点绘制。目前他们是根据他们的左下角绘制的。因此,当发生纹理交换时, Sprite 会轻微跳跃,因为原点不匹配。

我已经创建了一些变量来调试并确保它们是正确的。

    TextureRegion sprite = null;

boolean useHighResTexture = (_gameRef.cameraZoom < CAMERA_ZOOM_SWITCH_LO_RES);
if (useHighResTexture) {
//Zoomed in, Hi res, Use animation
sprite = animation.getKeyFrame(animationStateTime, true);

} else {
//Zoomed out, lo-res, Use static image
sprite = Assets.instance.getSmall();
}


float spriteWidth = sprite.getRegionWidth();
float spriteHeight = sprite.getRegionHeight();
float spriteOriginX = spriteWidth/2;
float spriteOriginY = spriteHeight/2;

//Draw(TEXTURE, x, y, originx, originy,
// width, height, scaleX, scaleY, rotation,
// srcX, srcY,
// srcWidth, srcHeight, boolflipX, boolflipY

//this.setCenter(spriteOriginX, spriteOriginY);

batch.draw(sprite.getTexture(), this.x, this.y, spriteOriginX, spriteOriginY,
spriteWidth, spriteHeight, 1.0f, 1.0f, this.directionFaced,
sprite.getRegionX(), sprite.getRegionY(),
sprite.getRegionWidth(), sprite.getRegionHeight(), false, false);

您可以看到我使用 AssetsManager 在放大版本 (16x16) 上使用动画,在缩小版本 (4x4) 上使用静态图像。

变量 spriteWidthspriteHeight164 时都是正确的,具体取决于是放大还是放大出。

变量 spriteOriginXspriteOriginY82 上都是正确的(我假设),这取决于是否放大或缩小。

我本以为原点设置如上,它会根据原点绘制 Sprite (作为从左下角的偏移量)

我在 batch.draw() 中的调用是否正确?

非常感谢,J

最佳答案

不,这是不正确的。 draw() 始终使用左下角作为位置。原点仅用于缩放和旋转。
所以对你来说,这意味着你必须从你的位置中减去原点:

batch.draw(sprite.getTexture(), this.x - spriteOriginX, this.y - spriteOriginY,
spriteOriginX, spriteOriginY, spriteWidth, spriteHeight, 1.0f, 1.0f,
this.directionFaced, sprite.getRegionX(), sprite.getRegionY(),
sprite.getRegionWidth(), sprite.getRegionHeight(), false, false
);

通过这样做,您只需将左下角(即位置)向左和向下“推”一半宽度和一半高度,这样您的位置就真正定义了 Sprite 的中心。

同样:原点仅用于旋转和缩放。如果您在 draw() 方法中设置旋转,它将围绕原点旋转(在您的例子中是中间)。

关于java - libgdx spritebatch 不基于纹理的原点绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22761894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com