繁体   English   中英

libgdx spritebatch不是基于纹理的Origin绘制的

[英]libgdx spritebatch not drawing based on a texture's Origin

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

然而,为了使其成为平滑过渡,需要绘制精灵(位于[x,y]),其原点是精灵的中心。 目前他们正在根据他们的左下角绘制。 因此,当纹理交换发生时,精灵会略微跳跃,因为原点不匹配。

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

    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)上使用静态图像。

spriteWidthspriteHeight变量在164都是正确的,具体取决于放大还是缩小。

变量spriteOriginXspriteOriginY82都是正确的(我假设),具体取决于放大还是缩小。

我会想到如上设置的原点,它将根据该原点绘制精灵(作为左下角的偏移)

我在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
);

通过这样做,您只需将左下角(即位置)向左下方“推”半宽半高,以便您的位置真正定义精灵的中心。

再次:原点仅用于旋转和缩放。 如果在draw()方法中设置旋转,它将围绕原点旋转(在您的情况下为中间)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM