2016-11-17 1 views
0

Ich Sprites uppon Körper, mit dieser Methode (in meinem Körper Wrapper) Zeichnung:Draw Sprite auf Körper - Kameraüberwachung Hafen und die Größe

private void drawBaseSprite(Batch batch){ 
     Sprite baseSprite = this.getBaseSprite(); 

     Vector3 bodyPixelPos = camera.project(new Vector3(body.getPosition().x, body.getPosition().y, 0)); 

     // TODO: 17/11/16 Review this 
     float w = scale * (baseSprite.getTexture().getWidth())/camera.zoom; 
     float h = scale * (baseSprite.getTexture().getHeight())/camera.zoom ; 

     baseSprite.setSize(w,h); 
     baseSprite.setOrigin(w/2, h/2); 
     baseSprite.setPosition(bodyPixelPos.x -w/2, bodyPixelPos.y - h/2); 
     baseSprite.setRotation(body.getAngle() * MathUtils.radiansToDegrees); 


     baseSprite.draw(batch); 
    } 

Alles ist gut, bis ich die Fenster versuchen, Ändern der Größe. Nun, ich bin nach dieser Resize-Logik (implementiert Bildschirm):

@Override 
public void resize(int width, int height) { 
    stage.getViewport().update(width, height, true); 
    stage.camera.setToOrtho(false, Constants.VIEWPORT_HEIGHT *width/(float)height, Constants.VIEWPORT_HEIGHT); 
} 

Vor Resize: before resize Nach Resize (größere Breite): after resize (larger width)

Ich finde das absurd, weil dies:

 float w = scale * (baseSprite.getTexture().getWidth())/camera.zoom; 
     float h = scale * (baseSprite.getTexture().getHeight())/camera.zoom ; 

ändert sich nicht, während die Bilder x-skaliert sind.

Antwort

0

Bin ich richtig zu verstehen, dass dein Problem darin besteht, dass das Bild nicht oben auf dem Körper bleibt?

Wenn ja, ist der Grund, warum es nicht ist, dass Sie die Größe des Bildes relativ zur Kamera einstellen, nicht zu dem Körper, den es abdecken soll. Wenn der Zoom der Kamera geändert wird, passen Sie die Größe des Bilds an, nicht jedoch den Körper, und sie werden nicht mehr synchronisiert.

Ich würde empfehlen, Ihre Logik zu ändern, so dass die Bildhöhe/Breite rein vom Körper bestimmt werden, und Ihr Körper wird basierend auf dem Zoom der Kamera skaliert.

+0

Dank für die Beantwortung, aber ich verfolgt das Sprite Abmessungen: Gdx.app.log (this.getClass() getSimpleName() "w: "+ w +" h". + H); und sie ändern sich auch nach der Größenänderung nicht, weil sich der Zoom der Kamera nicht ändert (nur der Anzeige-Port wird geändert). – neogineer

0

Nun, das hat mein Problem gelöst, aber ich weiß immer noch nicht genau warum.

private void drawBaseSprite(Batch batch){ 
     Sprite baseSprite = this.getBaseSprite(); 
     batch.setProjectionMatrix(camera.combined); 
     float someScale = 0.1f; 

     float w = scale * (baseSprite.getTexture().getWidth())/camera.zoom *someScale; 
     float h = scale * (baseSprite.getTexture().getHeight())/camera.zoom *someScale; 


     Vector3 bodyPixelPos = camera.project(new Vector3(body.getPosition().x, body.getPosition().y, 0)) 
       .scl(someScale*camera.viewportHeight/(Gdx.graphics.getHeight()/20f)).sub(w/2, h/2, 0); 

     baseSprite.setSize(w,h); 
     baseSprite.setOrigin(w/2, h/2); 
     baseSprite.setPosition(bodyPixelPos.x, bodyPixelPos.y); 
     baseSprite.setRotation(body.getAngle() * MathUtils.radiansToDegrees); 

     baseSprite.draw(batch); 
    } 
Verwandte Themen