2016-06-05 17 views
0

Wenn ich das Sprite bei (0,0) mit der ursprünglichen Größe der Textur (256,256) zeichnen, funktioniert es gut, aber wenn ich die Position oder die Größe ändern, wird das Sprite durcheinander gebracht. Hier ist der Code:LibGdx Schnitt Textur statt Skalierung

private SpriteBatch batch; 
private Sprite sprite; 
private OrthographicCamera camera; 

@Override 
public void create() { 
    camera=new OrthographicCamera(600,600); 
    camera.position.set(0,0,0); 
    camera.update(); 
    batch=new SpriteBatch(); 
    sprite=new Sprite(new Texture("TestBlock_01.png"),0,0,256,256); 
} 

@Override 
public void render() { 
    Gdx.gl.glClearColor(1, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    batch.begin(); 
    batch.setProjectionMatrix(camera.combined); 
    batch.draw(sprite,sprite.getX(),sprite.getY(),sprite.getWidth(),sprite.getHeight()); 
    batch.end(); 
} 

resault: enter image description here

Aber jetzt, wenn ich ändern, um die Position und die Größe (-100, -100.100.100): enter image description here

Wie kann ich das beheben es?

+0

Verwenden 'sprite.draw (Batch);', nicht 'batch.draw (Sprite, ...);'. Man könnte es als grundlegendes Designproblem von libgdx bezeichnen, wenn Sprite die TextureRegion erweitert und hoffentlich in einer nächsten Hauptversion behoben wird. – Xoppa

Antwort

0

Die Antwort ist

sprite=new Sprite(Texture,x,y,width,height); 

mit

sprite=new Sprite(Texture); 
sprite.setPosition(x,y); 
sprite.setSize(width height); 
+0

Die Aufteilung des Konstruktors hat keine Auswirkung. –

+0

Der Konstruktor ändert die Variablen srcX, srcY, srcWidth und srcHeight. Dies sind verschiedene Variablen von der normalen x, y, Breite, Höhe. –

0

zu ersetzen Ich denke, Sie die Sprite-Ursprung gesetzt haben perfekt changing.As zusammen mit Skala und Position zu arbeiten beschrieben here

void setOrigin(float originX, float originY) 
Sets the origin in relation to the sprite's position for scaling and rotation. 

Und rufen Sie auch die Zeichenmethode in render mit Parameter origi nX, OriginY, wenn Sie perfekt drehen müssen. Wie beschrieben here

void draw(TextureRegion region, float x, float y, float originX, float originY, float width, float height, float scaleX, float scaleY, float rotation) 

Draws a rectangle with the bottom left corner at x,y and stretching the region to cover the given width and height.