2017-01-11 4 views
2

Ich habe eine Sprite-Bild Textur, die wie folgt aussieht: Kirby RunLibgdx Animieren Texture Regionen

Und ich versuche, es zu beleben. Ich habe diesen Code jeden Frame in eine TextureRegion Variablen zu speichern einzurichten dann speichern alle Frames in einer Animation TextureRegion Array

//AssetLoader class 
runTexture = new Texture("kirbyrun.png"); 
runTexture.setFilter(TextureFilter.Nearest,TextureFilter.Nearest); 

//Run Hiro 
hiro1 = new TextureRegion(runTexture,0,55,37,55); 
hiro1.flip(false,true); 
hiro2 = new TextureRegion(runTexture,37,55,44,55); 
hiro2.flip(false,true); 
hiro3 = new TextureRegion(runTexture,81,55,44,55); 
hiro3.flip(false,true); 
hiro4 = new TextureRegion(runTexture,129,55,46,55); 
hiro4.flip(false,true); 
hiro5 = new TextureRegion(runTexture,176,55,41,55); 
hiro5.flip(false,true); 
hiro6 = new TextureRegion(runTexture,216,55,41,55); 
hiro6.flip(false,true); 
hiro7 = new TextureRegion(runTexture,257,55,41,55); 
hiro7.flip(false,true); 
hiro8 = new TextureRegion(runTexture,301,55,42,55); 
hiro8.flip(false,true); 

TextureRegion[] run = {hiro1,hiro2,hiro3,hiro4,hiro5,hiro6,hiro7,hiro8}; 
hiroRunAnimation = new Animation<TextureRegion>(0.5f,run); 
hiroRunAnimation.setPlayMode(Animation.PlayMode.LOOP); 

Ich bin ein Strom yDown Koordinatensystem, weshalb ich das Bild spiegeln.

Nach dem Versuch, dies mit diesem Code zu rendern:

TextureRegion currentFrame = AssetLoader.hiroRunAnimation.getKeyFrame(runTime); 

sb.begin(); 

sb.draw(currentFrame,player.getX(),player.getY(),player.getWidth(),player.getHeight()); 
sb.end(); 

Es öffnet sich nur mit einem Bild von Blöcken statt Kirby: enter image description here

Es ist offensichtlich, dass ich etwas falsch mache, ich Ich rate es mit meinem TextureRegion Abschnitt, vielleicht meine X, Y Koordinaten oder falsch, aber ich bin nicht sicher, wie ich das beheben soll, weil ich spritecow.com benutzt habe, um diese Koordinaten zu erhalten. Ich nehme an, die obere linke Ecke ist (0,0) und positives Y bedeutet, dass das Bild nach unten bewegt wird. Wie kann ich Kirby anstelle dieser Boxen erscheinen lassen? Oder wäre es einfacher, jedes Einzelbild in eine separate PNG-Datei zu trennen und einfach Textur anstelle von TexturRegion zu verwenden, so dass ich keinen definitiven Bereich angeben muss. Dann könnte ich Animation verwenden oder würde das nicht auch funktionieren?

+0

Sind diese schwarzen Felder auf Ihrem Spritesheet? – eldo

Antwort

1

Die schwarzen Felder sind, weil Sie die Regionspositionen falsch definieren. Sie beginnen alle Regionen bei y = 55, was falsch ist, da die Textur bei y = 0 beginnt. Sie spiegeln auch die Texturen, die sie auf den Kopf stellen, also entfernen Sie auch das Spiegeln. Es scheint auch, dass Sie die Regionsgrößen für einige der Regionen falsch bestimmen, also sollten Sie sie wahrscheinlich doppelt überprüfen.

Der Code sollte wie folgt aussehen:

// Note the third value have changed to zeroes and the flipping has been removed. 
hiro1 = new TextureRegion(runTexture,0,0,37,55); 
hiro2 = new TextureRegion(runTexture,37,0,44,55); 
hiro3 = new TextureRegion(runTexture,81,0,44,55); 
hiro4 = new TextureRegion(runTexture,129,0,46,55); 
hiro5 = new TextureRegion(runTexture,176,0,41,55); 
hiro6 = new TextureRegion(runTexture,216,0,41,55); 
hiro7 = new TextureRegion(runTexture,257,0,41,55); 
hiro8 = new TextureRegion(runTexture,301,0,42,55); 

dies das Ergebnis Nachdem ich dies:

enter image description here

+0

Wie konnten Sie die genauen Koordinaten jedes Sprites ermitteln? –

+0

Ich habe die Koordinaten (x, width, height) nicht verändert, sondern nur die y-Startposition geändert. – Charanor

3

Bin ich es richtig sehen, dass man „hart codiert“ die koordinierte für die Sprites? Das ist keine sehr gute Idee, libGDX hat eine bequemere Lösung: Texture Packer.

Im Grunde, was Sie tun, ist die einzelnen Sprites in einen Ordner und führen Sie die Textur Packer Skript, um sie alle zusammenzuführen. Sie erhalten auch eine JSON-Datei mit den Sprite-Koordinaten. Sie können sie einfach mit einem Asset Manager laden. Ich habe hier ein Beispiel dafür erstellt: https://gist.github.com/reime005/87e1ed30548be31a632292a604f397ef