2016-03-24 3 views
0

Hallo Ich versuche, ein einfaches Spiel mit Libgdx zu machen, aber ich bin mit einigen Schwierigkeiten laufen die Sprite-Klasse, dies ist mein Code:sprite.SetScale Funktion funktioniert nicht (Libgdx)

package com.carebearer; 

import com.badlogic.gdx.ApplicationAdapter; 

import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.InputProcessor; 
import com.badlogic.gdx.graphics.GL20; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.g2d.Sprite; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 


public class demo extends ApplicationAdapter{ 
    SpriteBatch batch; 
    Texture img; 
    Sprite sprite; 

    @Override 
    public void create() { 
     batch = new SpriteBatch(); 
     img = new Texture("hello.png"); 
     sprite = new Sprite(img); 
     sprite.setScale(.5f); 
     sprite.setPosition(Gdx.graphics.getWidth()/2 - sprite.getWidth()/2, 
          Gdx.graphics.getHeight()/2 - sprite.getHeight()/2); 

    } 

    @Override 
    public void render() { 
     Gdx.gl.glClearColor(0, 0, 0, 1); //RGBAlpha, 1 = 100% 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     batch.begin(); 
     batch.draw(sprite, sprite.getX(), sprite.getY()); 
     batch.end(); 
    } 
    } 

Die Problem ist die setScale-Funktion.

Ob ich setScale benutze oder nicht, das Sprite bleibt gleich (Es tut im Grunde nichts). Was ich will es ist in der Größe zu halbieren der Sprite

Ich bin mir ziemlich sicher, dass ich etwas offensichtlich fehlen, aber ich habe mit diesem Problem mehr Zeit stecken, als ich es zugeben möchte.

+0

Ok nach Stunden des Versuchens gelang es mir, meinen Fehler nach ein paar Minuten der Veröffentlichung dieses zu finden. Damit die Skalierung funktioniert, müssen Sie sie an batch.draw senden, da es so aussieht, als würde die Funktion die Bild-Originalskalierung als Standard verwenden, wenn Sie sie nicht angeben. Hier sind die Änderungen, die am Code vorgenommen wurden. > batch.draw (sprite, sprite.getX(), sprite.getY(), sprite.getWidth()/2, sprite.getHeight()/2, sprite.getWidth(), sprite.getHeight(), sprite.getScaleX(), sprite.getScaleY(), sprite.getRotation()); – Gabriel

+0

Oder verwenden Sie das Sprite, um sich mit Hilfe der Charge zu zeichnen. 'sprite.draw (batch)' ist die beabsichtigte Art Sprites zu zeichnen. – Madmenyo

Antwort

0

Sie verwenden Sprite nicht richtig. Verwenden Sie sprite.draw(batch) nicht batch.draw(sprite, ...). Wenn Sie batch.draw verwenden, behandelt SpriteBatch Sprite wie eine dumme TexturRegion und ignoriert alle seine Positions- und Größenparameter. Und wenn Sie sie manuell anwenden, wie Sie es in Ihrem Kommentar getan haben, können Sie auch die viel leichtere TextureRegion anstelle von SpriteBatch verwenden.