2016-09-09 1 views
0

Ich arbeite an einem Spiel und benutze libGDX. Ich habe einen Ball, der auf dem Boden steht und kann einen Pfeil drehen, wenn er die Tasten drückt. Bis hier ist alles in Ordnung. Aber wenn sich mein Ball bewegt (auf dem Boden rollt), kann ich die Position des Pfeils nicht mit seiner Drehung aktualisieren. Bitte werfen Sie einen Blick auf: my super drawing skillsLibGDX Objekte übersetzen, ohne die Rotation zu verlieren

Sagen wir mal den Ball in 1. Zustand ist und Walzen und der Spieler den richtigen Schlüssel in der Zwischenzeit drücken, nach einigen Sekunden der Ball den 2. Zustand erreicht und wie Sie sehen in kann Das Bild, der Pfeil hat sich etwas gedreht und neben den Ball übersetzt. Ich kann das schaffen, wenn sich der Ball nicht bewegt, aber wenn der Ball sich bewegt, könnte ich es irgendwie nicht schaffen.

Hier sind meine Codes in Render-Methode:

// ARROW MOVEMENTS 
if(arrLeft) 
    Graphics.rotateAround(arrowInstance, MyGdxGame.tmpVec.set(0.8f,0,0), Vector3.Y, 1); 
if(arrRight) 
    Graphics.rotateAround(arrowInstance, MyGdxGame.tmpVec.set(0.8f,0,0), Vector3.Y, -1); 
if(arrUp) 
    Graphics.rotateAround(arrowInstance, MyGdxGame.tmpVec.set(0.8f,0,0), Vector3.Z, 1); 
if(arrDown) 
    Graphics.rotateAround(arrowInstance, MyGdxGame.tmpVec.set(0.8f,0,0), Vector3.Z, -1); 

meine rotateAround Methode:

public static void rotateAround(ModelInstance instance, Vector3 radius, Vector3 axis, float angle){ 
    instance.transform.translate(-radius.x, -radius.y, -radius.z).rotate(axis, angle).translate(radius); 
} 

Durch die Art und Weise ist hier die eine meiner Dutzende versuchen Codes und ich war zuversichtlich, dies funktionieren wird aber es hat macht nur den Pfeil um die eigene Achse drehen:

arrowInstance.transform.getRotation(quat, true); 
arrowInstance.transform.set(MyGdxGame.tmpVec.set(getBallPos()).add(0.8f,0,0), quat); 

Antwort

0

ich dachte, das wieder t ried schlauer und fand die Lösung. Ich würde den Pfeil zuerst an der Position des Balls positionieren und ihn dann von dort aus in den Radius verschieben, den ich bereits für meine rotateAround-Methode verwendet habe. Die Rotationen werden automatisch in der Transformationsmatrix gespeichert und müssen nicht damit verwechselt werden.

arrowInstance.transform.setTranslation(getBallPos()); 
arrowInstance.transform.translate(0.8f,0,0); 

("0.8,0,0" war mein Radius, die ich für meine rotateAround Methode)

Verwandte Themen