簡體   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