Wie funktioniert move_bounce_solid?

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

  • Wie funktioniert move_bounce_solid?

    Hallo,
    ich mach grad ein Spiel das ohne solid arbeiten soll, ich mag die Variable nicht. Die schränkt mich zu sehr ein und scheint teilweise total unkontrollierbar und ja...es ist besser ohne die zu arbeiten.
    Soweit so gut.
    Für move_contact_solid kann man sich ja noch easy einen Ersatz coden.
    Jetz bräucht ich aber auch einen Ersatz für move_bounce_solid.

    Also ich hab ein parent-Objekt dass quasi alle meine "Solid"-Objekte als parent haben. Und jetz hab ich eine Instanz die gegen eine solide prallt mit speed und direction.
    Und die soll jetzt abprallen als wäre die andere solid und ich hätte move_bounce_solid im collision event.

    Wie bewerkstellige ich das?
    Also, wie funktioniert die Formel um den Winkel zu berechnen in dem die Instanz abprallt.

    Danke schonmal :)
    Sorm ist Schuld

    Edit: Doch ist er
  • In etwa so:

    Quellcode

    1. // Im Kollisions-Event
    2. if (
    3. hitbox.y <= other.hitbox.y + other.hitbox.h
    4. || hitbox.y + hitbox.h >= other.hitbox.y
    5. ){ // vertikale Kollision
    6. direction = tan( -arctan(direction) );
    7. }
    8. if(
    9. hitbox.x <= other.hitbox.x + other.hitbox.w
    10. || hitbox.x + hitbox.w >= other.hitbox.x
    11. ){ // horizontale kollision
    12. direction = 180-direction;
    13. }
    Alles anzeigen


    Die genaue geometrische Erklärung, warum das gerade so funktioniert, weiß ich selbst nicht mehr bzw. hab sie nie auf wirklich hohem Niveau
    gewusst. Ich weiß nur, dass tan(x) = sin(x)/cos(x) und dass in jedem Step mit jeder Instanz das hier passiert:

    Quellcode

    1. x += speed * cos( radians(direction) );
    2. y += speed * sin( radians(direction) );

    Über tan(direction) beeinflusst du also direkt,in welchem Verhältnis die x- und y-Differenzen zueinander stehen, und weil arctan(x) symmetrisch zum Ursprung ist, kannst du das Ergebnis einfach mit -1 multiplizieren und kriegst garantiert den für tan(x) entsprechenden symmetrischen Wert raus.
    Ein versierterer Mathematiker als ich kann dir da bestimmt eine gescheitere Erklärung geben (oder du kommst sogar selbst drauf), aber ich hoffe, das reicht vorerst mal fürs Verständnis. ^^