Kompass / Kreisberechnung

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey,
    ich bräuchte Hilfe bei der Berechnung von Textdrawpositionen. Mein Vorhaben ist es einen Kompass zu erstellen. Er soll aus 5 Textdraws bestehen. Aus einem Pfeil um den sich 4 Buchstaben drehen: N(Norden), E(Osten), S(Süden), W(Westen).
    Da ich bisher die Textdraws noch nicht erstellt habe, nehmen wir eine Beispielsposition.
    Also sagen wir ich gucke nach Norden und die Koordinaten der Textdraws sind:
    Pfeil: X: 100 Y: 100
    N: X: 125 Y: 100
    E: X: 100 Y: 125
    S: X: 75 Y: 100
    W: X: 100 Y: 75
    Also die Buchstaben sollen immer um 25 (was auch immer die Maßeinheit ist :D ) vom Pfeil (100/100) entfernt sein. Berechnet soll die Position der Buchstaben immer in Verbindung der Facingangle des Spielers werden.
    Nur wie mache ich das bzw. welche Formel brauche ich ?
    Würde mich über Hilfe freuen :thumbup:

  • Könnte mir da jemand weiter helfen ?


    new Float:a, Float:x, Float:y;
    GetPlayerFacingAngle(playerid, a);


    //N
    x = 100.0 + (25.0 * floatsin(a, degrees));
    y = 100.0 + (25.0 * floatcos(-a, degrees));


    //W
    x = 100.0 + (25.0 * floatsin(-a-90.0, degrees));
    y = 100.0 + (25.0 * floatcos(a-90.0, degrees));


    //S
    x = 100.0 + (25.0 * floatsin(a+180.0, degrees));
    y = 100.0 + (25.0 * floatcos(-a+180.0, degrees));


    //O
    x = 100.0 + (25.0 * floatsin(-a+90.0, degrees));
    y = 100.0 + (25.0 * floatcos(a+90.0, degrees));

  • Müssten es nicht mehr-dimensionale Variablen sein, da du X und Y sonst immer "überspeicherst" ?


    new Float:a, Float:x[4], Float:y[4];
    GetPlayerFacingAngle(playerid, a);


    //N
    x[0] = 100.0 + (25.0 * floatsin(a, degrees));
    y[0]= 100.0 + (25.0 * floatcos(-a, degrees));


    //W
    x[1] = 100.0 + (25.0 * floatsin(-a-90.0, degrees));
    y[1] = 100.0 + (25.0 * floatcos(a-90.0, degrees));


    //S
    x[2] = 100.0 + (25.0 * floatsin(a+180.0, degrees));
    y[2] = 100.0 + (25.0 * floatcos(-a+180.0, degrees));


    //O
    x[3] = 100.0 + (25.0 * floatsin(-a+90.0, degrees));
    y[3] = 100.0 + (25.0 * floatcos(a+90.0, degrees));

  • Müssten es nicht mehr-dimensionale Variablen sein, da du X und Y sonst immer "überspeicherst" ?


    Kommt darauf an, muss man nicht. Warum Speicher verschwenden?


    //N
    x = 100.0 + (25.0 * floatsin(a, degrees));
    y = 100.0 + (25.0 * floatcos(-a, degrees));
    //Hier das N-TextDraw an der Position erstellen.


    //W
    x = 100.0 + (25.0 * floatsin(-a-90.0, degrees));
    y = 100.0 + (25.0 * floatcos(a-90.0, degrees));
    //Hier das W-TextDraw an der Position erstellen.


    //S
    //...usw


    Daher wird es nicht überschrieben, da man es gleich verwendet.