Spielfigur um Mausursor bewegen

  • Spielfigur um Mausursor bewegen

    Hallo, ich komm mal wieder nicht weiter... ich hoffe mir kann jemand helfen.

    Zum Problem:
    Ich hätte gerne, dass meine Spielfigur sich kreisförmig um den Cursor bewegt (straft), doch es gibt ein Problem: Mit dem Code, den ich benutze bewegt sich die Figur zwar um den Mauscursor, allerdings entfernt sie sich zunehmend davon. Sie "spiralt" sich also mehr um den Cursor und ich habe nicht den blassesten Schimmer woran es liegt.

    Hier der Code:

    GML-Quellcode

    1. move_towards_point(
    2. x + lengthdir_x(point_distance(x,y,mouse_x,mouse_y),point_direction(x,y,mouse_x,mouse_y)-90),
    3. y + lengthdir_y(point_distance(x,y,mouse_x,mouse_y),point_direction(x,y,mouse_x,mouse_y)-90),
    4. 10
    5. )


    P.S.: Die SuFu hab ich benutzt und auch alles ausprobiert, was ich gefunden habe, funktioniert bei meinem Problem nur nicht.

    Viele Grüße
  • Ich verweise da mal auf folgendes Thema:
    fixer punkt auf gedrehten sprites
    Ich bin nämlich grade zu faul, mir deinen Code näher anzuschauen. :D
    Außerdem kann man sich an dem Thema wirklich ganz schön die Zähne ausbeißen.(So wars bei mir)
    ___________________________________________________________
    Beware of wild pointers
    ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
  • Wie gesagt, ich habe in den letzten 3 Stunden die SuFu und alle erdenklichen damit zusammenhängenden Theme abgeklappert und ausprobiert. Von daher bringt es mir nicht viel wenn Jemand auf ein anderes Thema, in dem das Problem möglicherweise behandelt wird, verweist. Aber trotzdem Danke.

    Ich bräuchte jemand, der mehr Ahnung hat als ich und sich das mal anschaut und mir evtl. sagen kann wo der Fehler liegt. Von allein komme ich leider nicht drauf.
  • Das liegt wohl daran, dass die Richtung, die du angibst, die Senkrechte zur Mausrichtung ist. Du willst aber den Abstand behalten, also musst du den Winkel irgendwie anpassen. (Ich hab mal ein Bild angehängt)
    Bilder
    • strafe.JPG

      4,14 kB, 89×119, 252 mal angesehen

    "Is this one sloshing?"
    Four words you don't want to hear when you pick up a coffin...
  • Die Richtung, die du in deinen Funktionen angibst, ist die Richtung zur Maus -90°. Die habe ich auf meiner Skizze mit dem Pfeil dargestellt. Der Spieler sollte aber dem Kreis folgen. Deshalb musst du den Winkel um ein paar Grad verkleinern, oder die Position des Spielers noch einmal im Nachhinein verkleinern.
    Ich weiß auch nicht, wie ich das ausdrücken soll...

    "Is this one sloshing?"
    Four words you don't want to hear when you pick up a coffin...
  • Also wolff hat das Problem richtig erkannt... deine Loesung wuerde funktionieren, wenn dein room_speed gegen unendlich laufen wuerde, da das aber nicht geht, macht dein Kreis eine Spirale.

    Die Loesung fuer das Problem: Besser in Mathe aufpassen (Stichwort Einheitskreis)

    Also im Createevent sowas wie:

    GML-Quellcode

    1. dist=30; //entfernung vom Mittelpunkt/Mauszeiger
    2. deg=0; //Anfangsposition
    3. step=degtorad(360/room_speed); //Frequenz


    Und im Step:

    GML-Quellcode

    1. x=mouse_x+cos(deg)*dist-sprite_width/2;
    2. y=mouse_y+sin(deg)*dist-sprite_height/2;
    3. deg+=step;
    Dateien
    Du kannt gut pixeln? Du hast Lust ein Spiel zu entwickeln? Dann schau mal hier vorbei:
    Lass uns ein Spiel entwickeln!
  • Die Loesung fuer das Problem: Besser in Mathe aufpassen (Stichwort Einheitskreis)


    Alles was über einfache Mathematik hinausgeht ist für mich wie Zauberei :D

    Danke für dein Beispiel und die Erklärung (jetzt versteh ich wenigstens den Fehler), aber ich denke nicht dass ich diesen Code benutzen kann um meine Spielfigur um den Mauscursor zu bewegen. Das Problem: Er springt zur Maus, da seine Position immer relativ zur Position der Maus berechnet wird => Bewege ich die Maus, bewege ich auch die Figur.
  • Ach was... Einheitskreis ist doch Thema der 9. oder 10. Klasse (Stichwort sinus und cosinus)

    Zu deinem Problem: ich dachte das sollte so sein... hab dich also falsch verstanden.
    Im Endeffekt ist der Code (aus dem Stepevent) aber immer noch richtig...

    Du musst nur "dist" und "deg" berechnen.
    dist ist halt die Entfernung vom Objekt zum Mauszeiger (dafuer gibt es glaube sogar eine GM-Funktion) und
    deg ist der Winkel in dem sich das Objekt zum Mauszeiger befindet (laesst sich im Notfall mit einem gedachten Dreieck und sin/cos/tan berechnen)

    Bei step musst du schauen... ich weiss nicht wie du das haben willst.
    step ist ja die Geschwindigkeit... evtl. musst du da Geschwindigkeit in Winkelgeschwindigkeit umrechnen (je nachdem wie du es haben willst).

    Ich kann mich ganz vielleicht heut abend nochmal selber dransetzen, aber ich kann nichts versprechen.

    [Zusammengeschoben durch CAS]

    Ok...
    ich hab jetzt mal einfach deine variante veraendert (dann kannst du selbst zusehen, wie das mit der geschwindigkeit ist).
    Leider hab ich jetzt aber nicht die Zeit es zu erklaeren (ganz grob: ich berechne den Fehler und bei den als Winkelangabe mit ein):

    GML-Quellcode

    1. u=2*pi*point_distance(x,y,mouse_x,mouse_y);
    2. v=10;
    3. toleranz=(v/u)*180;
    4. move_towards_point(
    5. x + lengthdir_x(point_distance(x,y,mouse_x,mouse_y), point_direction(x,y,mouse_x,mouse_y)-90+toleranz),
    6. y + lengthdir_y(point_distance(x,y,mouse_x,mouse_y),point_direction(x,y,mouse_x,mouse_y)-90+toleranz),
    7. v)


    Dabei gibt v die Geschwindigkeit an.

    PS: Es kann noch immer sein, dass es einen kleinen Winkel gibt, um den das ganze abweicht, aber der (sollte er vorhanden sein) laeuft praktisch gegen 0.
    Du kannt gut pixeln? Du hast Lust ein Spiel zu entwickeln? Dann schau mal hier vorbei:
    Lass uns ein Spiel entwickeln!
  • @ Senmur:
    Mathe zu der Zeit war bei mir ziemlich für die Katz...

    Aber danke, es funktioniert wirklich hervorragend :D

    @ Spellmaker:
    Ist leider schon gelöst, aber auch dir danke.