Distanz zu Objekt

  • GM 8

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

  • Distanz zu Objekt

    Ich hab ein 2D game und demonstrie es hier mal:

    :action_drawsprite: "Monster"
    :event_step: "Pfad"
    :action_killposition: "Abwehrstellung"

    -------------------------------------------------------------------------------------

    :action_drawsprite: :event_step: :event_step: :event_step: :event_step: :event_step: :event_step: :event_step: :action_killposition:

    So jetzt folgt das Monster dem Pfad, es geht nur nach rechts also +X
    Und die Abwehrstellung soll sobalt das Monster in einer Nähe von X ist schiessen, also kein Radius wie in "Distance to Cbject" sondern nur auf dieser linie.


    Gibt es da ein Code oder wie macht man das, dass es nur auf der X Achse die Distanz zu einem Objekt misst?
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.

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

  • Dufner schrieb:

    Aber das ist trotzdem ein Radius

    point_distance() und distance_to_object() geben die Strecke von x1/y1 zu x2/y2 zurück. Wenn du einfach die gleichen y Koordinaten einsetzt, hast du den horizontalen Abstand, den du möchtest.
    Z.B. (in Abwehrstellung):

    GML-Quellcode

    1. if (point_distance(monster.x, y) < 50) {}
    2. //oder
    3. if (distance_to_object(x, y, monster.x, y) < 50) {}



    Dufner schrieb:

    wie meinst du das mit der Differenz?

    Du subtrahierst einfach eine x Koordinate von der anderen. Das Ergebnis ist der Abstand.
    Z.B. (in Abwehrstellung):

    GML-Quellcode

    1. if (abs(x - monster.x) < 50) {}

    abs() gibt den absoluten Wert zurück. Hier kann es ja auch vorkommen, dass das Ergebnis negativ wird, deswegen wird es durch abs() immer positiv gehalten.
  • -$Marvin$- schrieb:

    Dufner schrieb:

    Aber das ist trotzdem ein Radius

    point_distance() und distance_to_object() geben die Strecke von x1/y1 zu x2/y2 zurück. Wenn du einfach die gleichen y Koordinaten einsetzt, hast du den horizontalen Abstand, den du möchtest.
    Z.B. (in Abwehrstellung):

    GML-Quellcode

    1. if (point_distance(monster.x, y) < 50) {}
    2. //oder
    3. if (distance_to_object(x, y, monster.x, y) < 50) {}



    Dufner schrieb:

    wie meinst du das mit der Differenz?

    Du subtrahierst einfach eine x Koordinate von der anderen. Das Ergebnis ist der Abstand.
    Z.B. (in Abwehrstellung):

    GML-Quellcode

    1. if (abs(x - monster.x) < 50) {}

    abs() gibt den absoluten Wert zurück. Hier kann es ja auch vorkommen, dass das Ergebnis negativ wird, deswegen wird es durch abs() immer positiv gehalten.



    Es funktioniert einfach nicht!!! WARUM? :cursing:


    So möchte ich es haben:

    Wenn die Distanz vom Objekt "StandMG" größer oder gleich ist wie 10 soll es die Instance "o_granate" an der Position "o_StandMG.x" und "o_StandMG.y" erstellen. Aber die Distanz darf sich nur auf der X Achse befinden und die Objekte sind alle auf gleicher höhe, das heisst alle sind auf der Höhe von der X Achse gleich.


    Bitte helft mir ;(
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.
  • Larsi schrieb:

    Bitte sage mal genau, was nicht geht, zeige eventuell Fehlermeldungen
    und zeige deinen momentanen Code oder die .gmk


    Es spawnt das Objekt "o_granate" nicht.

    Der Code ist ja nur ganz kurz, das was ich da beschrieben hab.
    Der jetztige Code ist von Marvin nur mit meinen Objekten.

    Kannst du keinen Code von meiner Beschreibung in der vorigen Antwort schreiben? :(
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.
  • Wenn ich es so mache geht es nicht:

    GML-Quellcode

    1. if (point_distance(o_standmg.x,y,object28.x,y) <=90) // das <
    2. {
    3. instance_create(o_standmg.x,o_standmg.y,o_granate)
    4. }



    Aber so schon, aber dann schiesst es auch, wenn beide nicht auf der X Achse sind.

    GML-Quellcode

    1. if (point_distance(o_standmg.x,y,object28.x,y) >=90) // das >
    2. {
    3. instance_create(o_standmg.x,o_standmg.y,o_granate)
    4. }



    EDIT:

    Es geht jetzt doch, ich weiss auch nicht was ich grad gemacht hab.
    Aber wenn ich mehrere MGs hab schießt immmer nur das erst platzierte ???

    EDIT2:

    Oder wenn ich ein MG auserhalb platziere und ein innerhalb schiesst gar keins.
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Dufner ()

  • Larsi schrieb:

    veränder mal die 90 und versuch weiter.... nimm zum test mal 300...



    Es schiesst aber jetzt auch noch, wenn es versetzt ist, also auch wenn sie nicht auf der selben X Achse sind. Was sie nicht sollen. Das heisst doch die Distanz misst immer noch im Radius!!?
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.
  • GML-Quellcode

    1. if (point_distance(o_standmg.x,y,object28.x,y) <=90) and o_standmg.y = object28.y
    2. {
    3. instance_create(o_standmg.x,o_standmg.y,o_granate)
    4. }
    Kopiere dies in deine Signatur, um es in deiner Signatur zu haben.
    Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
    Nach langer zeit wieder im Forum aktiv :D
  • Quellcode

    1. if (point_distance(o_standmg.x,y,object28.x,y) <= 90) and o_standmg.y = object28.y
    2. {
    3. instance_create(o_standmg.x,o_standmg.y,o_granate)
    4. }


    nimm das gleich weg = ist immer das es genau diese Variable ist benutze nur das < Zeichen

    ABGESEHEN DAVON PASSEN DIE KLAMMERN NICHT!!!

    GML-Quellcode

    1. if point_distance(o_standmg.x,y,object28.x,y) < 90 and o_standmg.y = object28.y
    2. {
    3. instance_create(o_standmg.x,o_standmg.y,o_granate)
    4. }

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

  • Danke ihr seid meine Rettung :thumbsup:

    Aber noch ein Problem, wenn ich mehrere Stand MGs habe wird die Granate immer am erst platzierten Objekt gespawnt.
    Ebenfalls spawnen keine Granaten, wenn ich zuerst eins auserhalb des Radiuses platziere und danach eins in den Radius.
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.