Obj_player soll Richtung Maus laufen

  • GM 8

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

  • Obj_player soll Richtung Maus laufen

    Hi leute ich hab da ein kleine Problem, das ich leider nur zur hälfte hinkriege. Und zwar ist mein Obj_player als bsp. in der mitte und soll sich nur auf x bewegen wenn die maus links vom objekt ist nach links und wenn rechts logischerweiße nach rechts. Ich probier schon den halben Tag rum. Danke im Vorraus :)
    Wir stehen zusammen und wir fallen zusammen
  • jawoll danke :D... genau so hab ichs gemeint. funktioniert :D, ein problem gibts aber und zwar wenn der mauszeiger unter dem obj_player ist oder er am rand ist springt der dauerhaft nach links und rechts. hättest vll. noch nen code für mich das wenn mousex auf gleiche position wie obj_player ist er hspeed = 0 schalten soll ? wäre echt klasse :D

    Edit: ok ich glaub was das angeht hab ich das hinbekommen

    GML-Quellcode

    1. if obj_player == mouse_x then
    2. {
    3. hspeed =0
    4. }


    aber er jumpt immernoch auf einer stelle nach links und rechts. kann es sein das man das nicht besser hinkriegt mit dem gamemaker ?

    Ah und aufjedenfall Danke Nils :D
    Wir stehen zusammen und wir fallen zusammen

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

  • Die Funktion ist bei move_towards_* schon mit drin. Wenn die Koordinaten schon übereinstimmen, ist die zurückgelegte Länge halt einfach gleich 0.
    Was hier passiert ist, dass das Objekt sich mit der Geschwindigkeit, sagen wir mal, 2 bewegt. Nun ist die Distanz zu den Mauskoordinaten aber z.B. 1.644 - mit einer Bewegung der Länge 2 schießt man damit etwas übers Ziel hinaus und ist im nächsten Step drum (2-1.644)=0.356 vom Ziel entfernt. Aaaalso wieder Richtung Zielpunkt springen. Und dann wieder. Und dann wieder. Und dann wieder. etc. etc.

    Lösen kannst du das, indem du die Länge, die gesprungen werden soll, einfach auf ein Intervall erweiterst. Nämlich: Alles was kleiner oder gleich SPEED ist.
    Dafür gibt's die hübsche Funktion min(a,b,c...), die immer den kleinsten der Werte zurückgibt, den du reinpackst und mit der du damit eine Obergrenze basteln kannst.
    In der Praxis sähe das also etwa so aus:

    GML-Quellcode

    1. move_towards_point(ziel_x,ziel_y,min(SPEED,point_distance(x,y,ziel_x,ziel_y)));

    Yay, Klammersalat :3
    point_distance(x1,y1,x2,y2) übrigens tut genau das, wonach es klingt: Es berechnet dir die Entfernung zwischen zwei Punkten - und die kannst du dann direkt in min und schlussendlich in move_towards_point weiterverrechnen.

    Du merkst vielleicht, man muss nur seine Werkzeuge kennen, dann kommt man schon ziemlich weit. Ich empfehle als Einsteigerlektüre die GM-Hilfedatei. ;)