Parent außer eine Objekt

  • GM 8

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

  • Parent außer eine Objekt

    Hallo dude,

    Ich habe hier unzählige ähnliche Objekte, daher gibt es ObjektParent für unzählige Objekte.

    Nun das Problem ist es, wie kann ich es machen:

    GML-Quellcode

    1. if place_meeting(x+1,y,obj_parent + (!self){ //der soll also nicht selbst erkennen
    2. //tut was
    3. }


    Leider hat mir das nicht weitergebracht:

    GML-Quellcode

    1. if !place_meeting(x+1,y,self) and place_meeting(x+1,y,obj_parent){
    2. //tut was
    3. }


    Self hat das auch Parent "obj_parent", nur damit ihr es wisst ._. Besteht es also irgendwie eine Möglichkeiten, Collision von obj_parent zu erkennen, ohne sich selbst zu erkennen?

    Ich hatte keine Ahnung, wie ich das alles beschreiben sollte, falls jemand nicht verstanden hat, dann werde ich nochmal versuchen, gründlicher zu beschreiben.
    Ihr stinkt.
  • Neuer Versuch:

    Ich habe als Beispiel hier 5 Blöckeobjekte

    Alle 5 Blöckeobjekte haben gleiche Objektparent.

    Nun, ich will, das z.B. Sandblock erst reagiert, wenn es andere Blöcke kollidiert/zusammentrifft. Aber der Sandblock soll nicht reagieren, wenn ein andere Sandblock ihn kollidiert/zusammentrifft.

    Jedoch gehört Sandblock eine zu den 5 Blöcke, wo alle 5 Blöcke gleiche Parent hat.

    Und das Problem ist es, wie mache ich das jetzt?

    Als Beispiel könnte es so aussehen:

    If place_meeting(x,y,obj_parent) and !place_meeting(x,y,obj_sandblock){tut was}

    Jedoch geht das nicht, weil selbst der Sandblock zu obj_parent gehört.


    Besser? :D ich glaube nicht, das es besser ist... Aber mal sehen, vllt. verstehst du ja ._.
    Ihr stinkt.
  • Also wenn ich das richtig verstanden habe, sollte dein Ansatz eigentlich funktionieren: Jeder der fünf Blöcke lässt den ersten Ausdruck wahr werden, jeder außer dem Sandblock (also auch Objekte, die nicht zu den fünf gehören) lässt den zweiten wahr werden, und nur, wenn beides wahr wird, ist der Gesamtausdruck wahr.

    Jedenfalls gibt es noch mindestens einen anderen Ansatz:
    Wenn P1 dein Parent-Objekt ist und B1 bis B5 deine fünf Blöcke, führst du einfach noch ein weiteres Objekt, P2 ein. B1 und P2 haben dann P1 als Parent, B2 bis B5 haben P2 als Parent und in der Kollisionsabfrage fragst du dann nach P2. Alle Objekte B1 bis B5 erben so die Eigenschaften von P1, aber nur B2 bis B5 werden bei der Kollisionsabfrage betrachtet, weil nur sie von P2 erben.
  • Ich habe mal in der GM-Hilfe nachgeschaut und festgestellt, dass die collison_* Funktionen den parameter "notme" haben.
    Das ist glaub ich genau was du suchst.
    Mit den place_* Funktionen geht es so wie ich sehe leider nicht.
    Kopiere dies in deine Signatur, um es in deiner Signatur zu haben.
    Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
    Nach langer zeit wieder im Forum aktiv :D
  • Ja, aber:

    collison_* gibt die id des anderen Objects, mit der man dann prüfen kann, ob es ein sandblock ist.

    place_* gibt nur true oder false.
    Kopiere dies in deine Signatur, um es in deiner Signatur zu haben.
    Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
    Nach langer zeit wieder im Forum aktiv :D
  • Ja, aber:

    collision_* liefert dir nur eine ID; wenn du über diese dann rausfindest, dass es sich bei der zurückgegebenen Instanz um einen Sandblock handelt, bist du genauso schlau, wie vorher (zumindest für den Fall, dass es mehr als eine Kollision auf einmal geben kann). Mit den zwei Parents bist du da auf der sicheren Seite, da die Sandblöcke dann ganz rausfallen. So oder so: Mein Punkt war ohnehin nur, dass dieses notme nicht hilfreich ist.
  • CAS schrieb:

    Also wenn ich das richtig verstanden habe, sollte dein Ansatz eigentlich funktionieren: Jeder der fünf Blöcke lässt den ersten Ausdruck wahr werden, jeder außer dem Sandblock (also auch Objekte, die nicht zu den fünf gehören) lässt den zweiten wahr werden, und nur, wenn beides wahr wird, ist der Gesamtausdruck wahr.

    Jedenfalls gibt es noch mindestens einen anderen Ansatz:
    Wenn P1 dein Parent-Objekt ist und B1 bis B5 deine fünf Blöcke, führst du einfach noch ein weiteres Objekt, P2 ein. B1 und P2 haben dann P1 als Parent, B2 bis B5 haben P2 als Parent und in der Kollisionsabfrage fragst du dann nach P2. Alle Objekte B1 bis B5 erben so die Eigenschaften von P1, aber nur B2 bis B5 werden bei der Kollisionsabfrage betrachtet, weil nur sie von P2 erben.


    Das Problem ist es: Es sollte bei jeder Block (nicht nur die Sandblock, also B1) passieren. Daher braucht dann man mehrere Parents und das ist auch gerade nicht schön :/

    [Zusammengeschoben durch CAS]

    Es ist zwar nicht gelöst - aber ich glaube, ich habe schon ein gute Idee. Ich werde das mal morgen ausprobieren.

    [Zusammengeschoben durch CAS]

    Aus bestimmter Grund hat if place_meeting(x,y,obj_parent) and !place_meeting(x,y,obj_sand) doch geklappt ;)
    Ihr stinkt.