zusätzliche bedingung zu instance_nearest

  • GM 8

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

  • zusätzliche bedingung zu instance_nearest

    wie suche ich, das von der positon x,y nächste objekt, mit der eigenschaft "arbeiter_da = 0" ?
    und wandle es dann in koordinaten um?

    mit:

    GML-Quellcode

    1. if instance_nearest(x,y,ob_gatlin_mushroom).arbeiter_da = 0

    suche ich da das nähste objekt mit der eigenschaft arbeiter_da gleich 0
    oder suche ich damit nur das nähste ob_gatlin_mushroom und überprüfe ob arbeiter_da = 0 ist ?( ?(
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey
  • ich schätze mal mit:

    GML-Quellcode

    1. if instance_nearest(x,y,obj_gatlin_mushroom) && arbeiter_da = 0
    2. {/*blablabla_waspassierens_soll*/}


    achso, du meinst das Objekt soll die Variable besitzen:

    GML-Quellcode

    1. if instance_nearest(x,y,obj_gatlin_mushroom) { with obj_gatlin_mushroom {if arbeiter_da = 0 {/*blablabla*/}}

    in etwa, glaube ich (hab gerade keinen GM da^^)
  • GML-Quellcode

    1. mushroom=instance_nearest(x,y,ob_gatlin_mushroom)
    2. if mushroom.arbeiter_da = 0
    3. //Was dann passieren soll

    Oder:

    GML-Quellcode

    1. with instance_nearest(x,y,ob_gatlin_mushroom)
    2. {
    3. if arbeiter_da=0
    4. //Was dann passieren soll
    5. }

    Dabei musst du aber bedenken dass der with-part aus sicht des mushroom objekts ausgeführt wird, was lokale Variablen angeht.
  • so ganz funzt das leider noch net, euren varianten durchsuche ich immer nur den, von meinem punkt x,y, nächsten gatlin mushroom, aber es geht darum den nächsten zu finden, wo die variable arbeiter_da = 0 ist.

    das problem ist das der gesuchte mushroom halt nicht immer der ist, der am nächsten zu P(x,y) ist.

    Bildbsp:

    ich suche sozusagen die id des in diesem fall grünen mushrooms
    und das objekt des mittelpunkt P(x,y) ist das suchende objekt
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey
  • Da bleit dir wohl keine andere Wahl als von sämtlichen Instanzen, welche die Bedingung erfüllen die Distanz zum player auszurechnen und dann den kleinsten davon rauszusuchen.
    In dem Zusammenhang wären evtl. Listen von Vorteil.
  • Versuche doch eine Andere Herangehens weise. Die zwar komisch klingt aber was das Programm macht ist ja egal, solange es Funktioniert.

    Anstatt nach dem Mushroom zu suchen der noch frei ist, Lass den Mushroom Rufen das er frei ist. Im übertragenem sinne.

    Ich kenne zwar nicht die genauen Spiele details.
    Aber wenn bei einem Mushroom ein Arbeiter ist, steht diese Variable anschein auf 1. ok.

    So. Nun geb dem Mittelpunkt objekt doch einfach die "id" aus.

    Läst sich blöd erklären wenn man dein Speil nicht kennt.
    So egal. sagen wir dein mittelpunkt ist der Spieler.
    Dann erstelle eine variable im Spieler zb. "mushroom_id=0"

    Nun gehst du in den Mushroom und läast wie gesagt ,nicht vom Spieler/Mittelpunkt P den nächsten freien Mushroom der seine Variable arbeiter=0 hat, suchen.
    Sondern weist klar definiert vom Mushroom aus. Hallo ich binfrei und hier bin ich. :)

    Also.
    Im mushroom machst du folgendes rein.
    //if obj_player oder wie auch immer dein Mittelobjekt heist

    GML-Quellcode

    1. if arbeiter=0 then
    2. {
    3. if objekt_player.mushroom_id=0 then objekt_player.mushroom_id=id
    4. }
    5. //Das soll ver hindern das jeder frei Mushroom dem Spieler sein id zu ruft/zuweist. So ist ja der Spieler hin und her gerissen und wei nicht wo er zu erst hin solle weil ihm alle mushrooms zurufen.

    So nun hat der Spielerdie Objekt id gespeichert. Und zwar die von einem Mushroom ,der noch frei ist.
    jedoch gibt das nichts darüber auskunft wie nah oder wie fern dieser ist.
    Das must du dann noch mit if distane_to_objekt regeln wie es dir past.

    Nun heißen die x/y werte die du verwenen kannst also innerhalb des player objektes

    GML-Quellcode

    1. mushroom_id.x
    2. mushroom_id.y

    ansonsten von außerhalb.

    GML-Quellcode

    1. objekt_player.mushroom.x
    2. objekt_player.mushroom.y
    Meine Signatur hat kein Visum für das GM Forum erhalten.
  • probiers mal so:

    GML-Quellcode

    1. var i,dis,ins,near;
    2. dis = 10000; //irgendein hoher anfangswert, der garantiert größer ist, als der abstand zu allen betroffenen objekten
    3. for (i=0;i<instance_number(ob_gatlin_mushroom);i+=1) {
    4. ins = instance_find(ob_gatlin_mushroom,i); //id aller instanzen
    5. if (ins.arbeiter_da == 0) && (point_distance(ins.x,ins.y,x,y) <= dis) {
    6. dis = point_distance(ins.x,ins.y,x,y);
    7. near = ins; //near ist die näheste Instanz mit den gewünschten eigenschaften.
    8. }
    9. }


    in near ist die id der Instanz gespeichert. um z.b. die koordinaten zu verwenden, einfach near.x bzw. near.y benutzen.
  • danke für die antworten, habs jetzt so gelöst das jedes meiner mushrooms ein unsichtbares objekt erzeugt, wenn er gebaut wird. Es geht darum ich hab ne menge kleiner männlein die um ein feuer sitzten sobald nun ein mushromm gebaut wird erzeugt er dieses hilfsobjekt , eins der männlein läuft los, nimmt die koordinaten vom nächsten hilfsobjekt als ziel und das ho verschwindtet wieder .

    auf jeden fall vielen dank für die viele hilfe :rolleyes:
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey