Collision

  • GM 8

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

  • Hab ein Problem,
    ich möchte das ich in GML im Step Event eine Collision prüfe.
    Nur wie heißt der Code dafür, fand darunter auch nix bei der Suche.
    collision_point(x,y,obj,prec,notme);
    aber was gehört in prec und notme
    und obj?, welches objekt einsetzen, THX schon mal :thumbsup:
  • Was willst du genau Prüfen?
    Wenn du nur einen Punkt prüfen willst dann geht collision_point sehr gut.
    Prec gibt an ob die Kollision preziese, das heißt Pixel für Pixel stattfinden soll. Dies ist logishcerweise langsamer als wenn nur ein Rrechteck um die Objekte geprüft wird.
    Notme gibt an ob das ausführende Objekt ignoriert werden soll.
    Obj ist das wichtigste und gibt an was für Objekte überprüft werden sollen.
    Die konstannte "all" bedeutet dann dass alle Objekte überprüft werden.
    Sonbst kannst du zum Beispiel obj_player einsetzen, oder wie auch immer dein Objekt heist.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Die collision_... Funktionen geben immer IDs oder noone zurück. Eigentlich müsste es so gehen wie du geschrieben hast da IDs Zahlen großer als 100 000 sind und somit immer true sind.
    Frag aber nicht ab collsions_point(...) = true
    Das funktioniert nicht.
    Am sichersten ist ... != noone für "kollision" und ... = noone für "keine Kollision"
    Was passiert denn genau?

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • FATAL ERROR in
    action number 1
    of Step Event
    for object obj_player:

    COMPILATION ERROR in code action
    Error in code at line 17:
    {
    ^
    at position 2: Symbol ) expected.

    hmm, klammerfehler, muss den wohl noch suchen ;)
    Edit: gefunden :thumbsup: 3 Sekunden
    Naja nächstes Problem :/
    Wenn er eine collesion hat soll er stehenbleiben, tut er aber net.

    GML-Quellcode

    1. if (collision_point(obj_player.x, obj_player.y, obj_player, 0, 0))
    2. {
    3. y = y+5
    4. }
  • Moment, Unsinn.

    Was willst du jetzt überprüfen?? Mit dem Code da prüfst du nur ob am Punkt am origin des Players eine unpreziese Kollision mit dem Player stattfindet. Und dies ist absolut immer der Fall...

    Und y = y+5 bewirkt eben dass sich das Objekt bewegt. Schreib if ... = noone { y = y+5 } um das gegenteil zu bewirken.

    Leider muss ich jetzt weg. Viel Glück mit dem Problem. ich schreib morgen ein Example wenn du etwas besser beschreibst wass du tun willst.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Durchlesen:!!^^
    Ich möchte eine Schwerkraft mit GML entwickeln, dazu dachte ich,
    wenn der Spieler keine Collision hat, fliegt er nicht nach unten, hat er eine nicht.
    so ^^

    Edit: Ich dachte immer mit ! macht man das genau das gegenteil bewirkt wird :P
  • Oh man.
    Das löst man komplett anders. (du hast es nirgens erwähnt...)
    Erstens, im GM besitzen alle Objekte die Variable "gravity" und gravity_direction.
    Schreib ins step event:

    GML-Quellcode

    1. if place_free(x,y+vspeed)
    2. gravity = 0
    3. else gravity = 0.4;

    Und ins creation event:

    GML-Quellcode

    1. gravity_direction = 270;

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Das passiert im Grund von allein.

    Place_free gibt zurück ob das Objekt an den angegebenen Kooridnaten mit einem soliden Objekt kollisdiert. Durch meinen code wird dann die Gravity abgeschaltet.

    Dazu musst du aber alle Hindernis-objekte auf solid stellen!

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

    2 Besucher