Meine Nerven und das eine einzelne Objekt...

  • GM 8
  • Meine Nerven und das eine einzelne Objekt...

    Hallöchen, erst mal einen schönen Sonntag zusammen! Ich muß leider noch mal auf ein Problem zurückkommen, daß zwar schon mal für eine bestimmte Situation gelöst wurde, aber nicht für die jetzige Sachlage.

    Es geht darum, daß bei einer Kollision mit einem Objekt grundsätzlich alle folgenden Anweisungen für alle Objekte gleichen Namens ausgeführt werden. Es muß aber doch möglich sein, daß die Aktion(en) nur für dieses eine Objekt ausgeführt wird!

    Es gibt doch etliche Spiele, in denen ein Spieler z.B. etliche Münzen/Diamanten oder sonstwas auf dem Spielfeld einsammeln muß. Man kann doch nicht für jedes Teil ein einzelnes Objekt erstellen, obwohl es immer die gleichen Münzen/Diamanten etc. sind - die armen Ressourcen...

    OK, wenn das Obj. nur "destroyed" werden soll, kann man es mit einem leeren Rechteck übermalen, aber was, wenn andere Sachen, wie Animationen, ausgeführt werden sollen? Ständig machen das im Falle einer Kollision mit der Spielerfigur immer alle Objekte des gleichen Typs - wie geht Ihr denn mit diesem Problem um?

    Gibt es denn gar nichts, was die Anweisungen nur auf ein einzelnes Objekt beschränkt?

    Bin für jeden Tipp in dieser Richtung dankbar,
    Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • RE: Meine Nerven und das eine einzelne Objekt...

    Archie schrieb:

    Gibt es denn gar nichts, was die Anweisungen nur auf ein einzelnes Objekt beschränkt?

    Klar gibt es das; es nennt sich "other".
    Die variable other gibt es nur im Kollisionsevent und nimmt sofort bei Kollision die ID des Objektes an mit dem kollidiert wurde:

    D.h. wenn du schreibst: with(other) instance destroy()
    wird auch nur die andere Instanz zerstört.


    Du kannst damit auch direkt Variablen ändern.
    Indem du schreibst: other.image_speed = 1 kannst du z.B. die Animation starten.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Wenn's ums Einsammeln von Münzen geht, lass ich grundsätzlich jede Münze eine bestimmte Variable hochzählen - nennen wir sie mal global.coins - und überprüfe dann, ob diese Variable einer anderen entspricht, die zu Beginn des Levels auf die Anzahl der vorhandenen Münzen gesetzt wurde. So lässt sich z.B. eine Abfrage ertricksen, ob alle Münzen eingesammelt wurden - und als Counter darstellen lässt es sich so auch.

    Nun aber zur eigentlichen Frage: Es ist möglich, über die Variable id eine ganz bestimmte Instanz anzusprechen, statt das dazugehörige Objekt. Das kann aber nur von anderen Instances aus passieren, direkt im Editor geht das nicht. Der Code, den du bestimmten Objekten zuweist, gilt für alle Instanzen dieses Objekts.
    Ein Beispiel für das direkte Ansprechen einer Instanz wäre z.B.:

    GML-Quellcode

    1. {
    2. a=instance_create(x,y,enemy);
    3. a.HP=10;
    4. a.level=1;
    5. }


    In Kollisions-Events kannst du außerdem das Objekt, das mit der ausführenden Instanz kollidiert, über other ansprechen. (Edit: Da war DragonGamer wohl schneller :whistling: )
    Die collision_*-Funktionen geben ebenfalls eine Instance-ID zurück, die dann angesprochen werden kann.

    Du siehst, es gibt mannigfaltige Möglichkeiten, einzelne Instanzen anzusprechen, aber gerade bei solchen Dingen wie Münzsammelei ist das in vielen Fällen gar nicht nötig. Es muss ja nicht jeder Code, der dein Player-Objekt betrifft, auch im Player-Objekt ablaufen, oder? ;)
  • DragonGamer schrieb:

    Klar gibt es das; es nennt sich "other".
    Die variable other gibt es nur im Kollisionsevent und nimmt sofort bei Kollision die ID des Objektes an mit dem kollidiert wurde:
    Danke. Aber ich glaube, das löst mein Problem keineswegs - ich will ja net die Spielerfigur zerstören. "other" bezieht sich aber immer auf das andere Objekt der Kollision. Es sei denn.... es findet gar net im Player-Event statt... Mhm, da denke ich noch mal drüber nach :)

    Irrenhaus3 schrieb:

    Ein Beispiel für das direkte Ansprechen einer Instanz wäre z.B.:
    GML
    {
    a=instance_create(x,y,enemy);
    a.HP=10;
    a.level=1;
    }
    Ja, danke für die Antwort. Werde es mal damit versuchen. Weiß jetzt nur nicht, was Du mit "HP=10" meinst - vielleicht die Anzahl der Instancen?
    Also irgendwie werde ich das (hoffentlich) schon noch hinkriegen. Auch die Idee mit dem Nicht-Player-Event ist nicht schlecht.... s.o.

    Thx also,
    Archie
    PS: Wenn es Euch nicht gäbe... :D
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Danke. Aber ich glaube, das löst mein Problem keineswegs - ich will ja net die Spielerfigur zerstören. "other" bezieht sich aber immer auf das andere Objekt der Kollision. Es sei denn.... es findet gar net im Player-Event statt... Mhm, da denke ich noch mal drüber nach :)

    Hab jetzt nicht so ganz kapiert was du genau machen willst.
    Wolltest du nicht dass wen der Player mit einer Münze kollidiert dass diese dann zerstört wird??
    Das geht doch mit meinem Code ganz gut. Alternativ kannst du natürlich auch im Kollisionsevent der Münze miit dem Player schreiben dass sie selbst zerstört wird.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • DragonGamer schrieb:

    Hab jetzt nicht so ganz kapiert was du genau machen willst.
    Wolltest du nicht dass wen der Player mit einer Münze kollidiert dass diese dann zerstört wird??
    Das geht doch mit meinem Code ganz gut. Alternativ kannst du natürlich auch im Kollisionsevent der Münze miit dem Player schreiben dass sie selbst zerstört wird.
    Nee, sorry, ich glaub, das war mein Fehler, ich hab da wohl was falsch verstanden. Ich dachte, "other" bezieht sich immer auf das andere Objekt, daß bei der Kollision beteiligt ist - dem ist aber gar nicht so. War schon spät letztens... :whistling:

    Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • other bezieht sich schon auf das andere Objekt aber nur auf die spezifische instanz. Also es beinhaltet eine ID und nicht den Index eines Objektes. So kann man direkt die kollidierende Instanz ansprechen.

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

    1 Besucher