Realistische kollision

  • GM 7
  • Realistische kollision

    Moin moin,

    Ich habe mal eine Frage auf die ich einfach keine Antworten finde.

    Ich habe ein Object, das fährt immer, und läst sich auch nicht stoppen.

    Wenn ich mit diesem Objekt gegen eine Wand fahre hab ich mir gedacht die move_bounce_solid(false) Funktion zu benutzten. Doch die ist mir nicht realistisch genug, ich steuere ja keinen Flummi.

    Das problem nur, das der Speed sich nicht verändern darf.
    Das Object hat seinen Orgin verhältnismäsig weit hinten im verhältnihs zu Fahrtrichtung.
    Ich dachte gleich an eine do Schleife, die das Object so lange dreht bis es nicht mehr kolidiert. Das Problem ist aber nun, das ich nicht weiß in welche Richtung ich das Object drehen soll. Zudem wird das dann auch noch davon erschwärt, dass ich nicht weiß im welchen Vinkel die Wand steht mit der ich zusammenstoße. Das einzige was ich weiß ist das die Wand immer gerade linien hat, also keine gebogenen Wände.

    Ich habe das schon so oft bei topdown Spielen gesehen.

    Die Verbildlichung:



    Ich hoffe, dass ihr mir da mal auf die Sprünge helfen könnt.;)
  • Ja, das weiß ich auch! Aber

    1.Der Speed soll sich wie gesagt nicht verändern (das ist ein elementarer Teil meines Spiels)

    2. Es handelt sich hier nicht um ein Auto, wenn du es genau wissen willst, handelt es sich hier um eine Maus! ;)


    EDIT:

    Ich habe es zum 100 mal versucht selber zu machen, und zum ersten mal ist es etwas was man vieleicht als grundlage nehmen könnte:

    Probleme: viele, bugt, läst sich nur noch schwer steuern und fährt teilweise auch in die wände

    GML-Quellcode

    1. //Wenn man frontal auf die wand fährt*
    2. if (!position_empty(x+lengthdir_x(50,direction),y+lengthdir_y(50,direction)))
    3. {do direction+=10 until position_empty(x+lengthdir_x(50,direction),y+lengthdir_y(50,direction))}
    4. //wenn man in einmen anderme vinkel auf die wand zu fährt
    5. if (!position_empty(x+lengthdir_x(43.08,direction+27),y+lengthdir_y(43.08,direction+27)))
    6. {do direction+=10 until position_empty(x+lengthdir_x(50,direction+27),y+lengthdir_y(50,direction+27))}
    7. if (!position_empty(x+lengthdir_x(43.08,direction-27),y+lengthdir_y(43.08,direction-27)))
    8. {do direction-=10 until position_empty(x+lengthdir_x(50,direction-27),y+lengthdir_y(50,direction-27))}


    * Hier vermute ich da probelem, ich kann ja nicht sagen das die direction erhöhern kann, aber auch nicht kleine machen
    Außerdem vermute ich ein problem wenn mehrere Punkte mit der wand gleichzeitig kollidieren!

    Hilfe ;(

    EDIT: Wenn man nicht auf anhieb versteht was ich da oben im diesem codesalt gemacht habe, dann schaut ech mal das an.
    Mit x+lengthdir_x(50,direction),y+lengthdir_y(50,direction) rechne ich einem punkt im verhältnis zur fahrtrichtung aus, und das drei mal.
    Ich habe mal diese drei punkte gedrawt und ein screenshot gemacht: Anhang.
    An diesen drei punkten wird konstant geprüft ob eine kollision stat findet



    2 min. später...EDIT

    Habs, es funktioniert, jubii. 8o
    Ich hatte einfach einen winzigen fehler im code. Wenn man rechts von sich eine wand hat, wäre logisch wenn man nicht nach rechts dreht, sondern nach links. Aber genau das habe ich gemacht :thumbdown: . Schlechte idee. :D

    Danke an alle die hier vorhatten hier zu schreiben (auch wenn das bestimmt nicht so viele waren), hehe.
    Bilder
    • scrrren.JPG

      35,8 kB, 641×480, 180 mal angesehen

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von SDX ()