collision direction

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

  • collision direction

    Der Probelem is ein bisschen schwierig zu erklären deshalb fäng die Erklärung so banal an.
    Nicht das jemand nach den ersten paar Zeilen denkt, wie kann man nur sowas posten.

    Ein Kreis soll, wenn dieser mit einem eben Rechteck kollidiert, auf der weiterrollen.(Die Speed bleibt immer gleich)
    Des heißt also die direction muss danach 0 oder 180 sein.
    Wenn das Rechteck nun schief wird muss die direction 0 oder 180 plus der direction sein um das, das Rechteck gedeht wurde.
    Wenn das Recht aber nun durch eine unregelmäßige Fläche ersetzt wird (zb ein Hügel) , verändert sich die Direction ja ständig.Der Ball soll aber weiterhin immer auf der Fläche weiterrollen.
    Ich hat des zu erst mit folgendem Code versucht:

    GML-Quellcode

    1. if (collision_line(x,y,x+hspeed,y+vspeed,obj_Fläche,1,0))
    2. {
    3. counter=0
    4. direction0=direction
    5. do
    6. { direction=direction0+counter
    7. if (collision_line(x,y,x+hspeed,y+vspeed,obj_Fläche,1,0))
    8. {
    9. direction=direction0-counter
    10. if (collision_line(x,y,x+hspeed,y+vspeed,obj_Fläche,1,0))
    11. {
    12. counter+=1
    13. }
    14. }
    15. } until (!(collision_line(x,y,x+hspeed,y+vspeed,obj_Fläche,1,0)))||counter=360
    16. }
    Alles anzeigen

    Falls da ein Syntaxfehler is, dann kommt der daher weil ich den Code hier zum bessern Verständnis vereinfacht habe.
    Das Problem bei dem Code is,
    dass wenn die ausführende Instanz den Boden berührt sozusagen durch die Bedingung counter=360 in die Fläche fällt und dadurch
    das Programm versagt
    ohne counter kommt es zu endlosschleifen.
    So ich bräuchte jetzt nen Code der mir die Ball.direction immer so setzt ,dass der Ball eben auch über Hügel und so unregelmäßige Flächen rollen kann.

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