2017-12-15 18 views
0

Der Titel beschreibt mein Problem, wie Sie sehen können here mein Charakter ist in einem 45-Grad-Winkel spawnen. Das Zeichen erscheint immer bei (0, 0)Warum springt mein Charakter in einem Winkel von 45 Grad, wenn ich ihn auf 0 Grad eingestellt habe?

Ich habe einen Code für Animationen erstellt, der die Position des Charakters und die gewünschte Position verwendet, um zu berechnen, in welchem ​​Winkel der Charakter sein sollte. Dieser Winkel wird bestimmt, indem der prozentuale Abstand verwendet wird, den das Zeichen zu seinem Ziel zurückgelegt hat (diese Ziele sind nur Y-Werte. X wird bei jedem Tick um 1 erhöht). Ich habe eine Gleichung erstellt, um den Winkel basierend auf dem prozentualen Anteil zu bestimmen. Die Gleichung: - (9/500) X^2 + (9/5) X. Dies ist eine Parabel, die den Punkt (0, 0), (50, 45) ← 45 Grad Winkel und (100, 0) schneidet.

Der Code, den ich diese Gleichung verwenden gemacht ist wie folgt:

float GetRotationDegrees(int Current, int Target, int LaneWidth) { 
    int numerator = Current - LaneWidth; 
    int denominator = Target - LaneWidth; 
    float X; 
    if (denominator == 0) X = 0; 
    else X = abs(numerator/denominator * 100); 
    return -(9/500)*pow(X,2)+(9/5)*X; // function: -(9/500)X^2 + (9/5)X. 
} 

Die LaneWidth ist immer 400, Current den Charakter der aktuellen Y-Koordinate und Ziel ist das Ziel Y-Koordinate. Bei Y = 0 sollte die Gleichung -400/-400 * 100 = 100. sein Und wenn Sie 100 setzten in der Gleichung Du 0 erhalten, wobei dieser Wert von 0 wird dann wie folgt verwendet:

SetActorLocation(FVector(1, sin(angle * PI/180), 0).Rotation()); 

Ich bin wirklich verwirrt gerade jetzt, denn wenn ich manuell dies versuche, wird es nicht funktionieren.

Es ist wahrscheinlich etwas Dummes, das ich getan habe, ich schaue oft über die Dinge und bin nicht so gut in Mathe (ich bin auch neu in C++, also könnte der Fehler auch da sein). Wenn mir jemand helfen könnte, würde ich es sehr schätzen!

(Übrigens, ich weiß, dass die Art und Weise, dass GetRotationDegrees entscheidet X der Winkel nur positive Winkel zurück, ich will das erste zur Arbeit kommen)

+1

Ich hoffe, du definierst 'PI' nicht als 3 – Slava

+0

I didnt xD. Ich wünschte, es wäre so einfach lol – timgfx

+0

Wie auch immer Sie müssen erstellen [mcve] und liefern das erwartete Ergebnis und was Sie haben, wenn Sie wirklich Hilfe bekommen möchten – Slava

Antwort

0

Fest es mit diesem:

float GetRotationDegrees(int Current, int Target, int LaneWidth) { 
    if (Current == Target) return 0; 
    int MovingFrom; 
    if (Target != 0) MovingFrom = 0; 
    else if (Target > Current) MovingFrom = -LaneWidth; 
    else MovingFrom = LaneWidth; 

    float Percentage = float(Current - MovingFrom)/float(Target - MovingFrom) * 100; 
    if (Target < Current) Percentage = -Percentage; 
    bool isNegative = Percentage < 0; 
    if (isNegative) return -(-9 * pow(abs(Percentage), 2)/500 + 9 * abs(Percentage)/5); 
    return -9 * pow(Percentage, 2)/500 + 9 * Percentage/5; 
} 
Verwandte Themen