Globale Variablen von mehreren Objecten ansteuern?

  • GM 8

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

  • Globale Variablen von mehreren Objecten ansteuern?

    Guten abend.

    Ich habe in einem raum mehreren Objects, die alle folgendes Script im step event haben:

    GML-Quellcode

    1. //E meldung festlegen
    2. if point_distance(x,y,Player.x,Player.y)<=45{
    3. if not collision_line(x,y,Player.x,Player.y,obj_boden_par,true,true){
    4. global.E=true}
    5. else{
    6. global.E=false}
    7. }
    8. else{
    9. global.E=false}

    Diese global.E wird dann in meinem "control object" wieder aufgerufen, diesmal im draw event:

    GML-Quellcode

    1. //E anzeige
    2. if global.E==true{
    3. draw_sprite(spr_E,-1,Player.x,Player.y-43)}

    Das ganze soll bewirken,dass wenn der Spieler nahe an einem der Objects(z.B. ein schalter) steht, eine Meldung mit [E] über seinem Kopf erscheint.
    Mein Problem ist,dass das ganze nur mit einem (bei dem Object, dass beim starten die kleinste Distanz zum Spieler hat)
    klappt.

    Warum, und gibt es Ideen wie ich es anders umsetzen kann?
  • Naja das Problem ist dass wenn du mehrere dieser Objekte im Raum hast und nur einer davon neben deinem Spieler steht, dann setzen die anderen Instanzen die Variable E wieder auf false und zwar wegen dem zweiten else!

    Mach das lieber im player-Objekt denn es gibt eine Funktion namens instance_nearest(x,y,obj), damit kannst du automatisch das nächstgelegene Objekt finden welches diese E hervorrufen soll.
    Dann kannst du einfach im Step des spielers machen:

    GML-Quellcode

    1. global.E = false;
    2. var obj;
    3. obj = instance_nearest(x,y,obj_E);
    4. if obj // (wenn überhaupt eine Instanz im Raum existiert)
    5. if point_distance(x,y,obj.x,obj.y) < 45
    6. if not collision_line(x,y,obj.x,obj.y,obj_boden_par,true,true)
    7. global.E = true;

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • oh cool, instance_nearest(x,y,obj_E); war mir bisher unbekannt(arbeite aber auch erst sein ein paar tagen mit dem Game maker ;D),
    danke für die schnelle und hilfreiche Antwort :-),
    werde mich hier wohl wieder melden, wenn ich ein weiteres Problem nicht lösen kann.

    Edit:
    Hmm,
    nur müsste ich dann Code dann für jedes weitere object erweitern, da es nicht nur auf das eine obj_E reagieren soll
    ("obj = instance_nearest(x,y,obj_E);").
    [E] soll bei allen objects mit denen man, über E, interagieren kann angezeigt werden.

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

  • Uh da du ja scheinbar ein Objekt namens obj_boden_par(ent) benutzst, nehme ich an dass du weisst wie man "parents" benutzt (was durchaus erstaunlich ist wenn du noch Anfänegr bist. Glückwunsch! :) )
    Du kannst in diesem Fall ebenfalls ein Parent-Objekt benutzen. Z.B. obj_interact welches all Objekte als Parent bekommen die so ein E hervorrufen können.
    Dann kannst du in der instance_nearest Funktion, einfach obj_interact angeben.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • ahh stimmt, an die parents habe ich in diesem fall noch garnicht gedacht^^
    bisher nur bei collisions zusammen mit der mask benutzt :) danke nochmal ^^
    -------------------------------------------------------------------------------------
    Ich bin momentan verzweifelt am googeln ^^..
    versuche es hinzubekommen, das der schalter der gerade aktiv ist, grün umrandet wird.
    und das Ganze ohne einen neuen sprite erstellen zu müssen, ich weis dass es übers draw event geht, aber viel was mir helfen könnte finde ich nicht.. leider...
    Wäre nett wenn mir vllt. gerade in diesem tread geholfen werden kann, bevor ich später weider einen neuen aufmache ;D
  • deiroon schrieb:

    Ich bin momentan verzweifelt am googeln ..
    versuche es hinzubekommen, das der schalter der gerade aktiv ist, grün umrandet wird.
    und das Ganze ohne einen neuen sprite erstellen zu müssen, ich weis dass es übers draw event geht, aber viel was mir helfen könnte finde ich nicht.. leider...
    Wäre nett wenn mir vllt. gerade in diesem tread geholfen werden kann, bevor ich später weider einen neuen aufmache ;D
    Was meinst du mit "ohne einen neuen Sprite erstellen zu müssen"?
    Eine automatische Umrandungsfunktion gibt es leider nicht und lässt sich auch kaum umsetzen (sofern dein Sprite nicht genau rechteckig oder kreisförmig ist)!
    D.h. also wenn dein Objekt eine grüne Umrandung bekommen soll, musst du wohl oder übel entweder dessen sprite wechseln, oder du zeichnest mittels draw_sprite an die richtige Stelle ein Sprite welches nur die Umrandung enthält.

    Übrigens kannst du dein Sprite einfach im sprite editor umranden. Unter "images" gibt es das "glow" :)

    Btw, gute Nacht! o3o

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Benutzer online 1

    1 Besucher