alarm einer anderen instanz auslösen

  • alarm einer anderen instanz auslösen

    ich will nur mal sicher gehen, dass ich die optionen mit "self" "other" usw. verstanden hab.
    also es gibt eine kollision zwischen der spieler-instanz und der eines anderen objekts. in einem key-press-event des spielers steht folgender code:

    if (UseMode="on")
    {
    other.alarm[0]=1;
    };

    im alarm0-event der anderen instanz steht dann eine aktion. "other" scheint aber in diesem fall nicht zu funktionieren, da eindeutig der alarm0 der spieler-instanz ausgelöst wird. Im Grunde genommen ist aber doch alarm[0] eine variable wie jede andere, man könnte doch auch "other.x += 5" schreiben.

    ich vermute mal, dass es deshalb nicht klappt, weil ja unter umständen auch mehr als zwei instanzen an einer kollision beteiligt sein können. dann gäbs probleme.
    Wie könnte ich einen event der anderen instanz noch auslösen, möglichst ohne ihre id zu benutzen?
    Ne invoces expellare non possis!
  • RE: alarm einer anderen instanz auslösen

    Ich benutze eigentlich nie other oder allgemein die eingebauten Kollisionen, da sie sehr komplex sind und nur unnötig speicher brauchen. Wenn du dich in GML ein bischen auskennst kannst du zum Beispiel so etwas machen:

    GML-Quellcode

    1. other_id=instance_position(x+hspeed,y+vspeed,obj_diamond);
    2. if(other_id==noone){exit;}
    3. with(other_id)
    4. {
    5. score+=100;
    6. instance_delete();
    7. }


    Dragoon

    EDIT: -.- WA war natürlich schneller... hmpf
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • RE: alarm einer anderen instanz auslösen

    also ich hab da jetz doch noch ein problemchen damit...
    in der hilfe steht, dass man mit with-konstruktionen über eine "fremde" instanz verfügen kann als wäre sie die, an der man sich im moment tatsächlich befindet.

    Der Ansatz von Dragoon ist ganz gut und funktioniert soweit bis auf dieses with. wenn ich da einen unabhängigen befehl wie instance_create reinschreibe wird alles richtig ausgeführt. bloß wenn ich jetz wieder mein alarm[0]=1 reinschreibe (und laut hilfe müsste dann der alarm der "fremden" instanz auf 1 gesetzt werden) tut sich rein gar nichts. der zugriff auf die andere instanz funktioniert also nicht.

    ich hab schon versucht testhalber mal die instanz-id aus dem room editor direkt in den code einzufügen:

    with (100605)
    {
    alarm[0]=5;
    };

    was auch nicht funktioniert hat. warum das?
    Ne invoces expellare non possis!

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

  • diese zahl die du genommen hast muss natürlich die id des anderen objectes sein, nicht die aus dem beispiel.
    aber warum schwer wen es auch einfacher geht?
    probiere mal follgendes aus:

    GML-Quellcode

    1. in = instance_nearest(x,y,obj_other);
    2. if distance_to_object(in) = 0 then {
    3. in.alarm[0] = 1;
    4. }
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl
  • Es könnte da eigentlich 2 Fehlerquellen geben. Entweder das Objekt mit der ID 100605 hat nichts im Alarm Event oder du hast den Code in ein Step Event getan. Sonst fällt mir nichts ein...

    Dragoon

    PS: Benutz bei GML-Code bitte die GML-Tags [gml]

    EDIT: Jaja... die Rechtschreibung
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • ich bin doch so blöd :headtouch:

    @dragoon: dein ansatz funktioniert einwandfrei, hatte was anderes verbockt
    @nobody: deinen versuch ich auch noch, danke jedenfalls

    so und für alle dies interessiert oder sich drüber lustig machen wollen, das hatte ich im alarm0-event stehen:

    GML-Quellcode

    1. var LatestX;
    2. var LatestY;
    3. LatestX = x;
    4. LatestY = y;
    5. if (CurrentState="closed")
    6. {
    7. instance_destroy()
    8. instance_create(LatestX,LatestY,WoodenDoorH_openDown)
    9. CurrentState="open"
    10. };
    11. if (CurrentState="open")
    12. {
    13. instance_destroy();
    14. instance_create(LatestX,LatestY,WoodenDoorH_closed)
    15. CurrentState="closed";
    16. };
    Alles anzeigen


    die beiden if-statements "heben" sich sozusagen auf, deshalb hat man im endeffekt nichts gesehn. noch dämlicher gehts fast gar nicht mehr... *möp*
    Ne invoces expellare non possis!
  • blöd hin oder her. Das ist glaub ich jedem schonmal passiert und eine große Gefahr bei if-Statements. Sollte sich jeder (vor allem GML-Anfänger) mal anschauen und versuchen nachzuvollziehen, denn dann hat man sowas schonmal gesehen und wenn es einem selber mal passiert muss man nicht ewig suchen (und da braucht man im Normalfall wirklich ewig). Also entweder mit "else if" oder "exit". Die Strichpunkte nach geschweiften Klammern sind übrigens gänzlich überflüssig (auch in anderen Programmiersprachen).
    Einige meiner Spiele:
  • Benutzer online 1

    1 Besucher