Mouse Verfolgung

  • GM 7

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

  • Mouse Verfolgung

    Hi Leute!
    Ich steh gerade so extremst auf Leitung, das is echt krass.
    Gegeben ist ein Objekt, das Stepweise der Mouse durch die Funktion

    Quellcode

    1. move towards point
    folgt.
    Nun besteht jedoch das Problem, dass, wenn das genannte Objekt einmal den exakten Punkt der Maus erreicht, es zum, naja "zittern" anfängt.
    Das will ich aber nicht haben. Simple as that und doch son Mist.
    Kann mir wer helfen?
    Liebe Grüße!
  • Du könntest vorher prüfen ob das Objekt schon da ist, benutze mal point_distance(x, y, mouse_x, mouse_y)>1.

    #edit:
    Fehler gefixt.

    GML-Quellcode

    1. if (point_distance(x, y, mouse_x, mouse_y)>SPEED) {
    2. move_towards_point(mouse_x, mouse_y, SPEED);
    3. }
    4. else {
    5. x=mouse_x;
    6. y=mouse_y;
    7. }
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von henrik1235 ()

  • Das wäre gut möglich. Vielleicht wäre dem nicht so, wenn man ein Mausobjekt benutzen würde, dass sich immer bei der Mausposition befindet und dann das Objekt dem Mausobjekt folgen ließe.

    Edit: Geht auch nicht..
  • Nein, Henrik's Code hatte nur einen Makel.
    Wie hoch ist denn die Geschwindigkeit mit der bewegt wird?

    Der Abstand muss ja eben kleiner als das sein.

    GML-Quellcode

    1. if point_distance(x, y, mouse_x, mouse_y) > GESCHW
    2. {
    3. move_towards_point(mouse_x,mouse_y,GESCHW)
    4. }
    5. else
    6. {
    7. x = mouse_x;
    8. y = mouse_y;
    9. }

    Der Block nach dem Else sorgt dafür dass das Objektd ann nicht vor der Maus stehenbleibt.


    @Deathscythearan Lies doch bitte das nächste mal die Problemstellung o-o


    EDIT: Fehler im code korigiert, sorry. Nochn Fehler.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Deathscythearan schrieb:

    GML-Quellcode

    1. if(xmouse_x-32&&ymouse_y<-32)
    2. {
    3. //Halt stoppen oder sonst was :D
    4. }


    Den Code anpassen dan sollte es eigendlich gehen.
    Hab ich, funktioniert aber trotzdem nicht.

    DragonGamer schrieb:


    Wie hoch ist denn die Geschwindigkeit mit der bewegt wird?

    4, Speed is 4. Naja aber das kann dann nicht gehen, weil bei deinem Script Beispiel in meinem Fall, dann immer dem Objekt der aktuelle Platz der Maus zugewiesen wird. Also keine Verfolgung!
  • VioVio schrieb:

    Deathscythearan schrieb:

    GML-Quellcode

    1. if(xmouse_x-32&&ymouse_y<-32)
    2. {
    3. //Halt stoppen oder sonst was :D
    4. }


    Den Code anpassen dan sollte es eigendlich gehen.
    Hab ich, funktioniert aber trotzdem nicht.

    DragonGamer schrieb:


    Wie hoch ist denn die Geschwindigkeit mit der bewegt wird?

    4, Speed is 4. Naja aber das kann dann nicht gehen, weil bei deinem Script Beispiel in meinem Fall, dann immer dem Objekt der aktuelle Platz der Maus zugewiesen wird. Also keine Verfolgung!

    Den rest meines Codes hättest auch nutzen sollen, den der sollte dann funktionieren :D.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Deathscythearan ()

  • VioVio schrieb:

    Nja, das Zitieren hat scheinbar den Code durcheinandergehaut.
    Aber nein, es geht immer noch nicht ^^ das Objekt tanzt immer noch seinen epileptischen Breakdance.. wot? ich sitz ja selbst schon eine Stunde dabei und raffs nicht ab!


    Habs ma nu selbst getestet

    GML-Quellcode

    1. move_towards_point(mouse_x,mouse_y,4);
    2. if(x<mouse_x+2&&x>mouse_x-2&&y<mouse_y+2&&y>mouse_y-2)
    3. {
    4. speed=0;
    5. }

    Funktioniert bei mir einwandfrei.


    @DragonGamer
    "@Deathscythearan Lies doch bitte das nächste mal die Problemstellung o-o"
    Ich hab meine lösung zu dem Problem Gepostet.. wo liegt das Problem nun?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Deathscythearan ()

  • Deathscythearan schrieb:

    "@Deathscythearan Lies doch bitte das nächste mal die Problemstellung o-o"
    Ich hab meine lösung zu dem Problem Gepostet.. wo liegt das Problem nun?

    Sorry, hatte deine Lösung nur noch nie zuvor gesehen und dachte der Code würde was anderes machen. Außerdem hattest du ja den Wert 32 drin und ich hatte mich gewundert wie du ausgerechnet darauf gekommen bist...

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • DragonGamer schrieb:

    Deathscythearan schrieb:

    "@Deathscythearan Lies doch bitte das nächste mal die Problemstellung o-o"
    Ich hab meine lösung zu dem Problem Gepostet.. wo liegt das Problem nun?

    Sorry, hatte deine Lösung noch nie zuvor gesehen. Außerdem hattest du ja den Wert 32 drin und ich hatte mich gewundert wie du ausgerechnet darauf gekommen bist...

    Da hatte er ja noch nicht den Speed gepostet.. deswegen ja "Den Code anpassen dan sollte es eigendlich gehen." ;).
  • Noch eine Anmerkung zum Code von henrik1235/DragonGamer: Die Funktion move_towards_point bewegt nicht einfach das Objekt, indem es seine Koordinaten verändert, sondern es setzt direkt seine Geschwindigkeit und Richtung. Daher sollte der Code wie folgt aussehen:

    GML-Quellcode

    1. if (point_distance(x, y, mouse_x, mouse_y) > v) {
    2. move_towards_point(mouse_x,mouse_y,v);
    3. } else {
    4. speed = 0;
    5. x=mouse_x;
    6. y=mouse_y;
    7. }

    wobei v die gewünschte Geschwindigkeit ist. Ohne das Zurücksetzen der Geschwindigkeit "wackelt" das Objekt immer noch etwas seltsam wenn man die Maus bewegt.

    Prinzipiell halte ich aber die Lösung von henrik1235/DragonGamer für besser als die von Deathscythearan, da sich dort das Objekt auch wirklich ganz bis zum Ziel bewegt und nicht in einem gewissen Quadrat in der Umgebung einfach stehen bleibt. Übrigens halte ich diese Bedingung

    GML-Quellcode

    1. if(x<mouse_x+2&&x>mouse_x-2&&y<mouse_y+2&&y>mouse_y-2)

    für ziemlich willkürlich. Wenn schon, dann sollte man prüfen, ob sich das Objekt in einem bestimmten Kreis um dem Ziel befindet und nicht in einem Rechteck (So wie es in der anderen Lösung gemacht wird).

    Hier noch eine Variante, die ohne move_towards_point auskommt.

    GML-Quellcode

    1. s = v/max(v,point_distance(x,y,mouse_x,mouse_y));
    2. x += (mouse_x-x)*s;
    3. y += (mouse_y-y)*s;
  • Bl@ckSp@rk schrieb:

    Wenn schon, dann sollte man prüfen, ob sich das Objekt in einem bestimmten Kreis um dem Ziel befindet und nicht in einem Rechteck (So wie es in der anderen Lösung gemacht wird).

    Hab deine Codes eingebaut und funktionieren natürlich auch. Naja aber ist dann in meinem Fall irrelevant, da diese Funktion nur einen optischen Zweck erfüllen soll, und ob sich das Objekt jetzt bis auf 2 einem Kreis oder Rechteck nähert, ist bei dieser Größendimension denk ich eher unwichtig.

    lg

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von VioVio ()