Steigungen mit Pythagoras + Beispiel

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

    • Steigungen mit Pythagoras + Beispiel

      Berge -tut

      Ich habe jetzt einen eigenen Code entwickelt, um Steigungen hoch zu laufen. Unten könnt ihr euch das Beispiel mal downloaden.
      Bevor ihr erstmal einen Berg hinauf laufen könnt müsst ihr erstmal gehen können, das ist die Vorraussetzung^^ . Naja das werden ja hier die meisten ohne Probleme hinbekommen nun zu den Bergen:

      Man muss erstmal ein Objekt mit den namen z.b steil anlegen in ihm müssen wir ein Kollisionsevent einfügen mit den Player. dann fügen wir über die Menüleiste Control ein Code ein wo folgender Inhalt drinne steht:

      move_bounce_all(0)

      das Bedeutet: das jede Instanz abbrallt.
      Nun kommen wir zum eigentlichen Code im Player.
      Mann erstellt ein Collisionsevent im Player mit den steil Objekt / Bergeobjekt. Wir fügen wieder über Control ein Code ein der folgendes beinhaltet:

      GML-Quellcode

      1. if(keyboard_check(vk_right)){
      2. vspeed=0
      3. y-=1/sin((180-90-(sqrt(sqr(steil.sprite_height)+sq(steil.sprite_width))/steil.sprite_width)));
      4. }
      5. if(keyboard_check(vk_left)){
      6. vspeed=0
      7. y+=-1/sin((180-90-(sqrt(sqr(steil.sprite_height)+sqr(steil.sprite_width))/steil.sprite_width)));
      8. }
      9. if(keyboard_check(vk_nokey)){
      10. vspeed=0
      11. y-=sin((180-90-(sqrt(sqr(steil.sprite_height)+sqr(steil.sprite_width))/steil.sprite_width)));
      12. }
      13. if(keyboard_check(vk_up)){
      14. vspeed=-12;
      15. }
      Alles anzeigen


      Gut jetzt sind alle erstmal schockiert ^^ aber es ist ganz einfach. Ich erkläre mal vom Anfang bis zum Ende wie ich auf diesen Quellcode komme.

      Erstmal nehmen wir den Satz des Pythagoras:

      a²+ b² =c²

      nur noch Wurzel ziehen und wir haben c.

      Unser Billd/ unsere Steigung ist ein rechtwinkliges Dreieck.
      a nehmen wir für sprite_width und b steht für sprite_height.
      Das Sprite muss dementsprechend angepasst werden das es ein rechtwinkliges Dreieck entspricht --> siehe Beispiel.
      Da wir aber speziell jetzt für die Steigung nicht mit der Höhe und der Breite des Bildes anfangen können, müssen wir durch die Formel die Steigung heraus finden (in der Mathematik bezeichnet als hypothenuse und a und b in als Katheten ). Zum besseren Verständnis werde ich auch in der weiteren Erklärung a für sprite_width und b für sprite_height.

      Nun haben wir den Anstieg des Bildes. Aber nun benötigen wir auch noch den Winkel beta. Von Punkt beta gehen a und c aus.Also. Ich hoffe das ihr euch das vorstellen könnt lässt sich schwer beschreiben.
      Zum besseren Verständnis siehe Bild unten.

      So bekommen wir beta heraus:

      c/b= beta ( sin beta)

      Diese Formel bekommt man in dem mann sich mit den Winkel- funktionen beschäftigt.
      In den Winkelfunktionen haben wir folgende Bezeichnungen:
      a=Gegenkathete
      b=Ankathete
      c=Hypotenuse ( war ja schon bekannt).

      Diese 3 bezeichnungen ergeben sich für den Winkel alpha.
      Um sin alpha heraus zu bekommen ist uns folgende Formel gegeben:
      sin alpha =a/c (Tafelwerk oder Internet).

      Nun müssen wir dies für sin beta umstellen:

      sin beta=c/b

      b weil von beta aus gesehen b die Gegenkathete ist.

      So nun haben wir beta. Nun werdet ihr euch Fragen wozu wir beta brauchen. Ganz einfach um alpha heraus zu bekommen.
      Jetzt komme bestimmt gleich die einwürfe, das wir doch alpha einfacher herausbekommen können mit der oben genanten Formel:

      sin alpha =a/c (Tafelwerk oder Internet)

      aber wir benutzen diese nicht, da wir ja die Formel algemein machen wollen also für jedes Sprite nutzen wollen und a steht ja für sprite_width und das unterscheidet sich von Sprite zu Sprite höhstwarscheinlich.
      so nun errechnen wir alpha indem wir rechnen:

      180-90-betta=alpan

      180 weil wenn man das Dreieck aufklappt gesamt 180 ° ergeben und 90 ° weil wir einen rechten Winkel haben.
      Nun fehlt uns als letztes nur noch eine Variable die ich jetz mal c (ges) nen ges für Geschwindigkeit. Wir brauchen diese Variable, um die Figur den Berg hoch laufen zu lassen. Bisher haben wir nur c vom ganzen Sprite aber es soll ja nicht gleich am Ende des Sprite sein( oben am Sprite) sondern hochlaufen deswegen c (ges). Dieser Wert ist auch zum ende unser y Wert. aber um zu erklären wie der sich zumsammen setzt verwende ich nochmal kurz
      c(ges)

      Da wir die Formel wieder algemein nutzen wollen müssen wir folgende Formel nehmen:

      c(ges)=a/sin alpha

      Diesmal steht a nicht für sprite_width sonder für den x Wert. In meinen Beispielen hab ich für x einmal 1 für die kleinere Steigung und 2 für die größere Steigung genommen, weil ich x schon im step (algemeneinem laufen ) die Geschwindigkeit festgelegt habe.
      Nun müssen wir unsere ganze Formel zusammensetzen und da ergibt sich folgende Formel (erst mal mathematisch)

      y=x/ sin( (180-90-((wurzel(a²+b²))/b)))

      Hier hab ich halt alle Formeln zusammen genommen und mit Verschachtelungen gearbeitet. Ich hoffe doch ma das das alles klar ist.
      Ich habe halt anstatt die Ergebnissvariable die Formel zur Ergebnisvariable eingesetzt. Am besten lest euch den obrigen Teil durch falls ihr das nicht getan habt dann dürfte es versändlicher sein.

      Nun müssen wir das Ganze halt durch gml ersetzen
      da er laufen soll also
      y-->y- //relativ
      für x am besten 1 oder 2 je größer die Steigung je höher der wert.

      x-->1

      zum Wurzel ziehen schreibt man folgende Bezeichnung:
      wuzel -->sqrt()
      zum Quadrieren
      quadrat --> sqr()

      a --> sprite_width
      b --> sprite_height

      Da wir aber nicht die Höhe und Breite vom Spieler brauchen sondern die des Objektes müssen wir es sozusagen dahin verweisen, verlinken das geht in dem man den Namen des Objektes eingibt mit einen Punkt und welche Variabel man von den Objekt nutzen will in unseren Fall:

      steil.sprite_width
      steil.sprite_height

      Somit ergibt sich der Quellcode:

      GML-Quellcode

      1. if(keyboard_check(vk_right)){
      2. vspeed=0
      3. y-=1/sin((180-90-(sqrt(sqr(steil.sprite_height)+sq(steil.sprite_width))/steil.sprite_width)));
      4. }


      Wir sagen hir wenn der Spieler die Pfeil Taste Rechts drückt soll vspeed 0 sein und y- so sein. Bei der Linken Taste muss man den Sachverhalt einfach nur ein bisschen umdrehen. Und wenn er keine Taste drückt soll der Spieler an der Position x und y stehen bleiben, y-, weil sonst y 0 wird und somit ein fester Wert ist und somit nicht relativ.

      Dies ist das Beispiel für die Rechte Steigung steil die anderen findet ihr in der gm6.

      Eventuell ist das für den ein oder anderen hier einfacher zu verstehen als die anderen Berg -tuts die mit anderen Formeln arbeitet. aber ich find hier die ziemlich einfach und allgemeiner ^^

      ich hoffe euch hat das Tut gefallen und ich konnte euch helfen
      würd mich über ein Credit Eintrag freuen ^^

      mfg

      trgirl

      @mods: eventuell könnt ihr die quellcodes in den gml-editor hir rein tun bekomm das irgendwie nicht ganz hin ^^ danke ^^
      @trgirl: ist geschehen, aber so schwer ist das wirklich nicht.

      Edit's: Rechtschreibung
      Edit by Windapple: Unzählige Rechtschreibfehler entfernt.
      Bilder
      • dreieck.png

        2,75 kB, 219×214, 472 mal angesehen
      Dateien
      • Berge_tut.zip

        (27,88 kB, 397 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Windapple ()