Problem mit Drehung zur Direction

  • GM 7

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem mit Drehung zur Direction

    Also ich arbeite an einem Strategy-Projekt mit Draufsicht in dem man Panzer befehligt.
    Nun zermattere ich mir aber seit Tagen den Kopf an einem Problem und zwar:
    Ich definiere mit einem Mausdruck den Punkt zu dem die angewählte Einheit sich ersteinmal hindrehen und dann drauf zufahren soll.
    Der Skript dazu (ohne den Move-Befehl, der ist nicht das Problem) :

    GML-Quellcode

    1. dir=point_direction(x,y,go_x,go_y)
    2. if direction<dir
    3. {
    4. direction+=1
    5. }
    6. if direction>dir-1
    7. {
    8. direction-=1
    9. }


    Das Problem ist aber wenn die Angle zu dem Punkt zu dem die Einheit sich bewegen soll 359 ist also "dir=359", die Einheit aber auf Direction=0 steht dreht sie sich einmal im Kreis anstatt einen Grad in die andere Richtung.

    Ich hoffe ich habe es einigermaßen einleuchtend erklärt und ihr könnt mir Lösungsvorschläge posten.
    P.S.: Ich habe das Forum schon durchforstet aber keine Lösung für mein Problem gefunden.

    LG, Maz0r

    :D
  • Wie wärs hiermit?:

    GML-Quellcode

    1. image_angle=point_direction(x,y,go.x,go.y)
    2. move_towards_point(go.x,go.y,3)
    3. if direction<image_angle
    4. {
    5. direction+=1
    6. }
    7. if direction>image_angle-1
    8. {
    9. direction-=1
    10. }
    Alles anzeigen


    Und noch schnell am rande, der Sprite muss nach rechts zeigen damit es auch richtig funktioniert und er nicht in eine andere Richtung schaut):

    Also ohne irgendwelche Animationen, beispiel:
  • @Clonk_Fan:
    Wenn image:angle jetzt z.B. 2 ist und direction 350, dann gibt's wieder das gleiche Problem.

    Irgendwo im offiziellen Forum hatte ich mal ein Stück Code gefunden, was genau das macht was du möchtest:

    GML-Quellcode

    1. target_dir = point_direction(x, y, mouse_x, mouse_y);
    2. // Calculate the difference to the target direction...
    3. diff = target_dir - image_angle;
    4. // and warp it around -180 and 180...
    5. while (diff > 180) diff -= 360;
    6. while (diff < -180) diff += 360;
    7. // then turn the object in the shorter way.
    8. if (abs(diff) < turn_speed) {
    9. // In this case, make the object precisely fact to the target to avoid shaking.
    10. image_angle = target_dir;
    11. }
    12. else {
    13. image_angle += sign(diff) * turn_speed;
    14. }
    Alles anzeigen


    Um bei deinem System zu bleiben, musst du image_angle dann natürlich durch direction ersetzen.
  • Wow danke ihr habt mein Problem erkannt ^^

    @Clonk Fan
    Das wird wenig bringen da dabei wie von p-head erwähnt das gleiche Problem wie bei meinem Skript auftritt ...
    Aber trotzdem Danke für die rasche Antwort ;)

    @p-head
    Der Skript sieht doch vielversprechend aus und leuchtet mir i-wie ein ...
    Werd ich gleich mal versuchen ^^

    [[Zusammengeschoben von Ih3]]

    So habs nun ins Game eingefügt und passend umgeschrieben ...
    Funktioniert perfekt :D
    Danke für die Hilfe ;)

    :D