Frage zur Kollisionsüberprüfung

  • GM 8

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

  • Frage zur Kollisionsüberprüfung

    Huhu,
    habe eine kleine Frage und zwar steht in meinem Code:

    GML-Quellcode

    1. if (collision_point(x+1,y,all,true,true)=false){self.laufen=1}


    Ich habe mir die englische Hilfedatei durchgelesen und habe das jetzt so verstanden:

    Wenn an der um einen Pixel nach rechts verschobenen Stelle des x-Wertes dieses Objektes kein anderes solid Objekt steht, dann wird die variable self.laufen auf 1 gesetzt.

    Komischerweise springt diese Variable aber nie auf 1, obwohl kein objekt weder rechts noch links von diesem Objekt ist. Diese Überprüfung befindet sich im step-event.

    Eine weitere Frage:
    Was ist genau mit "The argument prec indicates whether the check should be precise or only based on the bounding box of the instance." gemeint?


    MfG
    naibaf
    True story!

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

  • probiers mal mit:

    GML-Quellcode

    1. if place_free(x+1,y)
    2. {
    3. laufen=1
    4. }

    (Entfern bitte alle "self."s aus deinen codes, erleichtert das lesen und spart dir arbeit)

    Und was genau verstehst du am englischen Satz nicht?
    Das Argument gibt an, ob die Kollisionsprüfung präzise, also Pixelgenau sein soll, oder nur die rechteckige Boundingbox auf Kollision gecheckt werden soll.
  • Ohne self.xyz klappen alle meine Skripte nicht. Keine Ahnung wieso nicht.

    Ja mit place_free würde es theoretisch gehen. das Problem: ich habe 2 Gruppen an Objekten:
    DIe objekte a bis e dürfen sich untereinander nicht behindern, genau wie die objekte f bis j.
    Mit collision_free kann ich aber nicht zwischen den Objektgruppen differenzieren :/

    MfG
    True story!
  • Trunks parent hab ich nie gehört. wäre nett wenn du mir das fix erklären könntest :)

    Also zu dem was ich wohl grundlegend falsch mache:

    Ich habe ein Objekt.

    Im create event erstelle ich einen code, zum beispiel

    GML-Quellcode

    1. var self.abc=0;


    Nun benutze ich die Variable im step-event, zum beispiel:

    GML-Quellcode

    1. if (self.abc>=0){...}


    Entferne ich das self. kommen Fehlermeldungen wenn das betreffende Objekt erstellt wird, mit self. klappt es wunderbar.
    True story!
  • Wenn du ein Objektfenster auf hast findest du "Parent" zwischen "Depth" und "Mask".

    Lass das "var" weg, dann funktioniert es.
    Mich wundert es, dass es mit "self." funktioniert.
    Das "var" bewirkt eigentlich, dass die Variable nur für das Event in dem es aufgerufen wird vorübergehend existiert.
    Nützlich zb. in einem Script um etwas zwischenzuspeichern, was nicht dauerhaft Speicherplatz belegen soll, sondern eben nur innerhalb einer Rechnung im Script.
    In deinem Fall existiert die Variable also nur im Createevent und ist im Stepevent wieder vergessen.
  • Das heißt ich erstelle 2 Objekte mit den Namen A und B.
    Ordne die Objekte a bis e den Parent A und den Objekten f bis j den Parent B zu.

    Wenn ich nun eine Kollision mit A überprüfe, zählen dort auch alle Objekte zu, dessen Parent A ist? Hab ich das soweit richtig verstanden?

    Nun muss ich mit:

    GML-Quellcode

    1. collision_point(x,y,obj,prec,notme)
    überprüfen, ob ich mit dem Objekt kollidiere.

    Die variable laufen soll 1 werden, wenn ich nicht kollidiere, also

    GML-Quellcode

    1. if (collision_point(x,y,obj,prec,notme)=false){laufen=1}


    Hmm aber dadurch wird laufen nicht auf 1 gesetzt, wenn er NICHT mit dem Objekt kollidiert.
    True story!
  • haste "obj,prec,noteme" auch durch die richtigen Werte ersetzt?
    Und ich würde "place_meeting()" statt "collision_point()" verwende.
    Bei collision_point fragst du nur den Punkt ab, bei place_meeting ob es überschneidungen beim gesamten Sprite gibt, wenn es an der bestimmten Stelle ist.
  • Danke TrunkX, die mechanik von collision_point() ist sehr vage definiert, ich check das nciht, aber mit place_meeting klappts perfekt.
    Und danke zur Erläuterung mit den Variablen. Werde ich zukünftig so machen. Nur meine 50 Objekte ändere ich jetzt nicht mehr ^^
    danke danke ;)
    True story!