GM:S Physics - Objekt soll nur mit anderem Objekt kollidieren wenn...

  • Allgemein

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

  • GM:S Physics - Objekt soll nur mit anderem Objekt kollidieren wenn...

    Hi,
    gibt es eine Möglichkeit dass ein Collision-Event nur aufgerufen wird wenn z.B. eine Variable einen bestimmten Wert hat.
    Und wenn sie false ist soll so reagiert werden es wäre kein Kollisions-Event mit Objekt X hinzugefügt worden.


    lg. pac

    Edit: Oder gibt es eine Möglichkeit per Code die Collision Gorup zu ändern?
    Sorm ist Schuld

    Edit: Doch ist er

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

  • Sieh's andersrum: Am Anfang des Kollisionseventes kannst du einfach den Wert deiner Variable abfragen, und wenn dieser nicht deinen Wünschen entspricht, einfach den kompletten Restcode exit-en. Wenn du das ganze Kollisionsevent mit einem Code behandelst, kannst du einfach folgendes an den Anfang setzen:

    GML-Quellcode

    1. if (!deinevariable)
    2. { exit; };

    Sonst geht das sicher auch mit Drag & Drop
  • haha xD Nein echt? ... Das ist absolut nicht das was ich haben will.
    Ich bin ja nicht blöd.

    Ich möchte dass das Objekt nicht mit dem anderen kollidiert! In der Physik Simulation!
    Aber es wird ja kollidieren sobald es ein Collision Event gibt. Egal was da drin steht. Oder?


    lg. Pac
    Sorm ist Schuld

    Edit: Doch ist er
  • Danke, das hab ich auch schon versucht.
    Hat aber irgendwie nur komisch funktioniert.
    Irgendwie haben die dann nich aufeinander reagiert, nach instance_change. Aber gegen andere Objekte sind die kollidiert.
    Wenn ich die gleichen Objekte aber stat instance_change mit instance_create und destroy mache, dann funktionierts.....
    sehr merkwürdig und nicht zufriedenstellend :/

    trotzdem danke :thumbup:
    Sorm ist Schuld

    Edit: Doch ist er
  • Als erstes sollte man zwei Fixtures erstellen mit den zwei unterschiedlichen collisions groups und speicherst dessen ID's in zwei unterschiedlichen Variablen ab. Dies sollte nur einmal bei der Raumerstellung erfolgen, sonst hat man am Ende unnötig viele Fixtures. Bei der Instance erstellung benutzt du dann beim Aufrufen der Funktion "physics_fixture_bind(fixture, target)" die gewünschte Fixture. Wichtig dabei ist dass man den Rückgabewert dieser Funktion speichert. Das tauschen der Fixtures erfolgt mit diesem Code:

    GML-Quellcode

    1. //In diesem Beispiel müssen old_col_enable und col_enable beide auf true gesetzt werden.
    2. //fixture_a wäre die Fixture mit Kollision und fixture_b ohne.
    3. //Bei Änderungen muss col_enable einfach entsprechend gesetzt werden.
    4. if(old_col_enable != col_enable)
    5. {
    6. physics_remove_fixture(id, fixture_bind_return_val);
    7. if(col_enable)
    8. fixture_bind_return_val = physics_fixture_bind(fixture_a, id);
    9. else
    10. fixture_bind_return_val = physics_fixture_bind(fixture_b, id);
    11. old_col_enable = col_enable;
    12. }
    Alles anzeigen

    Warnung: Ich habe diesen Code nicht getestet! Das Zauberwort sollte hier aber physics_remove_fixture sein. Auch steht in der Hilfedatei dass die Funktion ohne der ID der Instance funktioniert und in der Codesyntax dass es mit der ID ist.