Bombe mit "distance_to_object"

  • GM 8

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

  • Bombe mit "distance_to_object"

    Ich möchte eine Bombe machen, die logischerweise mehr abziehen soll, wenn man näher dran ist. Wenn man distance_to_object benutzt, bekommt man natürlich immer mehr Schaden, je weiter man weg ist. Wie bekomme ich also distance_to_object anders rum hin?
    I am an in the GM Quiz!
  • Dann must du eine Umkehr rechnung machen. Da du ja aus einem Wert der weniger wird , eigntlich einen Wert haben wilst der höher ist.

    Das geht auf 2 versionen.
    gehen wir mal davon aus das bei einer Entfernung von über 100 nicht passiert. So würde die Wirkung ab 100 oder weniger anfangen.

    Da brauchst als qasi die entferung von der bombe zu dir und nicht von dir zur bombe.
    Als machst du eimfach "wirkungsfaktor=-100-distance_to_objekt.
    Das ist dann der wert von der Bombe aus gesehen.
    Meine Signatur hat kein Visum für das GM Forum erhalten.
  • Allerdings musst du bei diesem Beispiel überprüfen, ob der Wirkungsgrad wirklich negativ ist, ansonsten bekommt man Pluspunkte wenn man weit genug entfernt ist.
    Eine andere möglichkeit wäre auch diese (etwas "realistischer"):

    Wirkungsgrad=Maximaler_Wirkungsgrad/(distance_to_objekt(obj_bla)+1);

    Hier gibts dann allerdings keine Höchstentfernung bei der man noch Schaden abgezogen bekommt. Das müsstest du dann noch manuell einbauen.

    Grundsätzlich musst du dir halt überlegen, wie stark es nach außen hin abnehemen soll. Soll es mit jedem Pixel ein Schadenspunkt weniger sein, oder soll der Unterschied weit weg nicht mehr so groß sein?

    maxda
  • @Lucke
    also ich würd das so machen:

    die eine Variable so lassen wie sie ist und zwei weitere noch dazunehmen.
    zb b und c...

    bevor der Skript nun die neue Variable testet mit distance_... , schreibst du b=a hin. Somit hast du dann nämlich immer den "alten" Wert in der zweiten variable. Nun testest du nach dem distance_... dingens, ob die beiden Variablen a und b gleich sind, wenn dies der Fall ist gibst du c=a wieder ansonsten c=0 (oder das was du bevorzugst, was anstatt des ein step intervalls kommen soll)
    natürlich benutzt du dann c als Ausgabe-Variable.

    in code etwa so:

    GML-Quellcode

    1. b=a;if(distance_to_object<400) {a=1} else {a=0};
    2. if(a=b) {c=a} else {c=0};


    hoffentlich ist das so richtig...
    ////////////////////////////////////////////////////////////////////////////////////////////////
  • Lucke: Was meinst du mit Flackern? Wenn es im 400-Radius ist, ist es eben 1 ansonsten 0...

    Außerdem reicht in deinem Fall auch a=(distance_to_object<400);

    Vielleicht ist dein Problem, dass ein 400-Abstand nicht aktzeptiert wird obj1 (0|0) obj2 (0|400). In dem Fall sollte es (distance_to_object<=400) heißen.

    Biochemic:
    Ich bin nicht ganz sicher was du damit bewirken willst, aber was bring das b=a wenn am Ende doch c die End-Variable ist?
    Außerdem: Wenn a vorher 0 war, dann kann c niemals 1 werden.

    maxda
  • Also erstensmal meint Lucke das, wenn sich das Objekt auf den Mittelpunkt zubewegt und da dann anfängt zu zittern (sofern ich es nicht falsch verstanden hab).

    und ansonsten gleicht man mit diesem Trick im endeffekt dieses ungewollte Zittern, also diesen "Lass das Objekt jeden Step zwischen 1 und 0 schalten" Fehler aus.
    ////////////////////////////////////////////////////////////////////////////////////////////////
  • dann fängt der Wert an zu flackern

    Das klingt für mich fast so das es das objekt , welches nach der entfernung gefragt wird , einfach mehr mals vorhanden ist.
    Das du ja geschrieben hast der Wert flackter und nicht das Objekt.....
    Das eine ist näher als 400 und ein anders des selben Typs weiter.
    Fals es das ist, must du das anders erfragen.

    if distance_to_object(instance_nearest(x,y,object))<400.
    Meine Signatur hat kein Visum für das GM Forum erhalten.