Objekt ID im View abfragen

  • GM 8

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

  • Objekt ID im View abfragen

    Erstmal ein Hallo an alle, ist ja mein erster Beitrag hier. :rolleyes:
    Und gleich komme ich mit einer Frage.

    Beispiel:
    In einem Level habe ich z.B. mehrere Objekte vom Typ "objTuer" platziert und es gibt auch einige "objLichtschalter".
    Nun kommt die Spielfigur in einem View welches beides beinhaltet und es findet eine Kollison mit dem "objLichtschalter" statt.
    Das Licht geht nun aus und "objTuer" soll dunkel werden. Bleibt aber da, also kein "Destroy".
    Mittels "objTuer.image_blend" oder "objTuer.visible" könnte ich das nun machen.
    Aber dies würde dann natürlich auch für alle anderen "objTuer" im Level gelten.

    Ich müsste also nun die ID von "objTuer" erfahren, welche sich im aktuellen View befindet, damit nur diese "dunkel" geschaltet werden kann.
    Komme aber momentan zu keinen vernünftigen Ergebnis.

    Gruß
    Thomas

    P.S.
    Ja ich habe auch die Suchfunktion im Forum genutzt. Aber leider nichts gezieltes zu meiner Frage gefunden.
    Evtl. ja auch nur die falschen Suchbegriffe eingegeben. ?(
    ---------------------------
    http://games.pixas.de
    ---------------------------
  • Du könntest es mit eine Colisionsbox machem.
    Wenn nur 1 tür im View ist dann mach doch
    Dann mach doch in die tür den code so rein
    if collision_rectangle(view_xview,view_yview,view_wview,view_hview,selkf,1,0) then ()//dein code
    damit erkennt die Tür ob sie im View ist, oder nicht. wenn ja soll sie nun ihre eigene id an eine variable des Spielers weiter reichen oder den lichtschalter.
    =die variable nenne wir im lichtschalt zb.
    tür_id=0
    Wenn du nun den lichtschalter betätigst steht bei der aktion licht aus
    with(tür_id){zb visble=0}//oder wie auch immer dein dunkelmach befehl aussieht
    Meine Signatur hat kein Visum für das GM Forum erhalten.
  • @x-sascha
    Die Tür soll selber abfragen ob sie im View ist und nicht der Lichtschalter! 8o
    Na klar, das könnte es sein. Werde es gleich ausprobieren.

    @CAS
    Danke für die Antwort, aber das geht leider nicht. Manchmal ist eine andere Tür außerhalb des Views näher.
    ---------------------------
    http://games.pixas.de
    ---------------------------
  • Dann fällt mir noch ein fieser Hack ein, von dem ich allerdings nicht weiß, wie performant er ist:

    Zu Spielstart setzt du dir eine globale Variable auf false. Bei der Kollision mit dem Schalter setzt du sie auf true. Und im Draw-Event der Tür fügst du dann folgendes ein:

    GML-Quellcode

    1. // angenommen, es geht hier um View0
    2. if((global.foo == true) && (view_current == 0))
    3. {
    4. global.foo := false;
    5. // code, um die ID irgendwo hinzuschreiben oder direkt mit der Tür das zu machen, was du vorhast, hier hin
    6. }
    7. draw_sprite(sprite_index, -1, x, y); // oder direkt ein entsprechender Befehl, um die Tür in abhängigkeit einer anderen Variable abgedunkelt oder hell zu zeichnen
  • @CAS
    Auch nicht schlecht, aber ich will mir das zusätzliche Draw lieber ersparen.

    Leider ist irgendwo noch der Wurm drin. Habe im Step der Tür nun folgendes eingefügt:

    GML-Quellcode

    1. if collision_rectangle(view_xview,view_yview,view_wview,view_hview,self,1,0)
    2. {
    3. global.tuer_id=id
    4. }


    global.tuer_id bleibt aber immer auf 0. Habe es auch mit anderen Objekten versucht, selbst mit der Spielfigur, aber es bleibt 0.
    ?(
    ---------------------------
    http://games.pixas.de
    ---------------------------
  • GML-Quellcode

    1. if collision_rectangle(view_xview,view_yview,view_xview+view_wview,view_yview+view_hview,self,1,0)
    2. {
    3. global.tuer_id=id
    4. }


    du musst bei view_wview und hview noch view_xview bzw. yview addieren, da diese Werte keine Position angeben sondern nur Breite und Höhe, die Funktion collision_rectangle aber Koordinaten verlangt.

    © 2008 by Teamgrill Productions
  • Ja das macht natürlich Sinn und ich dachte das wäre der Fehler.
    Leider funktioniert das aber auch nicht.

    [EDIT]
    Ich habe jetzt mal ein neues Projekt mit nur einem Raum und einem Objekt erstellt.
    Im Step des Objektes habe ich dann folgendes eingefügt:

    GML-Quellcode

    1. if collision_rectangle(0,0,640,480,self,1,0) { global.tuer_id=id }


    Im Debugger bleibt aber die Variable "global.tuer_id" auf 0.
    Was ist denn da los?

    [EDIT_2]
    Hab was rausgefunden.
    Wenn ich die Tür gezielt von einem anderen Objekt aus abfrage, erhalte ich die ID der Tür.
    Es scheint also so, das sich ein Objekt nicht selber mit "collision_rectangle" abfragen kann.

    [Edit_3]
    Obiges stimmt leider nicht ganz. Ich erhalte zwar eine ID, es ist aber die der zuletzt platzierten im Level.
    Wie erhalte ich also nun die ID der Tür, welche ich im "collision_rectangle" abfrage?
    Stehe nun praktisch wieder am Anfang meines Problemes.
    ---------------------------
    http://games.pixas.de
    ---------------------------

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Skywalker ()