Weitestes Objekt anzeigen lassen

  • Weitestes Objekt anzeigen lassen

    Ich habe nun ein kleines Problem.

    Im room habe ich ein hauptobjekt, und mehrere blöcke.
    Ich möchte von einem Objekt aus, auf der y Koordinate überprüfen welcher Block am weitesten entfernt ist. (nur auf der y Achse!)
    Dann will ich die länge (in Pixel von mir aus...) anzeigen lassen. (Das anzeigen ist kein Problem für mich.^^)

    Jedoch habe ich null Plan wie ich das anstellen soll. (Denkblockade...) :S

    Könntet ihr mir da helfen? :)
  • Du legt eine ds_priority an, schreibst da alle y-Distanzen rein, und nimmst dann mit ds_priority_max die größte raus. Ansonsten Google: "instance_farthest"

    Früher habe ich sowas folgendermaßen gelöst:

    Quellcode

    1. var max,result;
    2. max=0;
    3. for (i=...) // alle Distanzen
    4. {
    5. if distanz > max
    6. {
    7. max=distanz;
    8. result=i;
    9. }
    10. }
    11. return result;
    Alles anzeigen

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

  • Wie wäre es mit "instance_furthest" ?


    Tut mir leid, mein Hirn hat kurz ausgesetzt, mit instance_furthest gehts nich weil dich nur die y-achse interessiert.
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • melancor war schon gar nicht so verkehrt.

    man kann alle instancen mit eine for schleife checken:

    GML-Quellcode

    1. var result, largest, dist;
    2. largest=0;
    3. for (i=0 i<=instance_count i+=1) {
    4. dist= point_distance(x,id[i].y,x,y);
    5.   if dist>largest && object_get_name(i)=obj_block {  
    6.   largest=dist;
    7.   result=id[i];
    8.   }
    9. }
    10. return result;
    Alles anzeigen



    gibt die id von der instance wieder, die am weitesten auf der y akse entfernt ist!

    PS: ich kann es jetzt nicht testen, da ich hier keinen GM habe, aber ich werde es ausprobieren sobald ich zuhause bin :P

    EDIT: schreibfehler, max kann man nicht als variable benuztzen, und und und

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

  • SDX schrieb:

    max kann man nicht als variable benuztzen
    Doch.

    Es ist kompletter Schwachsinn, alle Objekte durchzugehen.
    Bei object_get_name(i)=obj_block musste ich lachen.
    Und was result=id[i]; soll, versteh ich auch nicht wirklich ...

    GML-Quellcode

    1. var pointy,object,farthest;
    2. pointy = argument0;
    3. object = argument1;
    4. farthest = noone;
    5. with (object) {
    6. if (farthest == noone) {farthest = id;}
    7. else if (abs(y-pointy) > abs(farthest.y-pointy))
    8. {farthest = id;}
    9. }
    10. return farthest;
    (Abgeänderte Version von instance_nth_farthest)
  • Nur um das richtigzustellen:
    object_get_name(obj) gibt ja eindeutig ein String zurück, also muss das "obj_block" heißen (mit Anführungszeichen).
    object_get_name(i) ist auch falsch, object_get_name(instance_id[i].object_index) muss da stehen (Vielleicht kann man das .object_index auch weglassen).
    Die bessere Lösung wäre allerdings object_index == obj_block.

    Und wegen sowas bin ich der Meinung, dass du noch nicht GML Fortgeschrittener bist :P
  • Benutzer online 1

    1 Besucher