SDL: Bewegung auf einer schrägen Bahn



  • Hallo erstmal,
    ich probier mich momentan in SDL ein wenig aus. Bin noch relativ am Anfang C++ zu lernen - somit ists nur eine Spielewiese für mich momentan.

    Ich hatte vor, ein kleines Raumschiff (ein einfach Bild) per Tastensteuerung auf dem Bildschirm zu bewegen. Hoch und runter sollte das Schiff beschleunigen bzw abbremsen - soweit auch ok. Die Richtung wollte ich mit den Pfeiltasten links und rechts ändern.

    Nun mein Problem! Hoch, runter, links, rechts das Teil fliegen zu lassen ist einfach (x- bzw y-Koordinate des Objekts vergrößern, verkleinern). Aber wie lasse ist das Schiff beispielsweise in einem Winkel von 10° fliegen? 45° könnt ich auch noch verstehen (x und y gleichmässig vergrößern).

    Danke schonmal für eure Hilfe!



  • die Trigonometrie hilft

    tan(Winkel) ist das verhältnis, in dem du deine Beschleunigung nach x- und y-Geschwindgkeit aufteilen musst.

    Edit:
    Wenn der winkel zum Horizont gemessen wird, dann ist sin(Winkel)*irgendeinFaktor die y-geschwindigkeit, und cos(Winkel)*irgendeinFaktor die Geschwindigkeit an der x-Achse.

    Genaueres bei: http://de.wikipedia.org/wiki/Trigonometrie



  • @Krux: So in der Art hab ich mir das auch schon gedacht. Aber...
    Angenommen 0° ist steil nach oben und 90° noch rechts und so weiter... wie bekomm ich dann 10° hin? Ich könnte natürlich die y-Koordinate um Beispielsweise 9 Pixel runterrechnen und x um eins hoch. Dann kann ich immerhin schonmal in schonmal in 10° "Schritten" mich bewegen (würde ja auch reichen). Aber das wäre doch dann viel zu schnell. Ich kann doch nicht immer 10 Pixel über den Bildschirm hüpfen. Da überspring ich ja die Hälfte und es wäre ausserdem viel zu "schnell"....



  • // a: beschleunigung
    // speedx: geschwindigkeit in x richtung
    // speedy: geschwindigkeit in y richtung
    double ax = cos(phi) * a;
    double ay = -sin(phi) * a;
    speedx += ax;
    speedy += ay;
    

    Die Vorzeichen sollten für Bildschirmkoordinaten stimmen wenn ich mich nicht irre, also für "+ ist von oben nach unten".
    EDIT: das "zu schnell" Problem gehst du am besten mit float/double oder Fixkomma an /EDIT



  • Also das ganze so zu drehen, das es nach oben Zeigt, müsstest du ja eigentlich hingekommen (einmal den Bildschirm umkippen)
    Winkel misst man gegen den Uhrzeigersinn, das bedutet 90° sind links. Wenn du unbedingt diese regel brechen willst, dann multipliziere deinen Winkel mit -1, das reicht dann schon.



  • Ich dachte immer 0° sind rechts und 90° sind oben...



  • Ok ok, das mit den Gradzahlen und den Richtungen ist mir auch aufgefallen. Ist ja aber nicht so tragisch.

    Aber warum bekomm ich bei sin(90) den bitteschön 0.893997?? Das ist doch etwas weit danneben oder steh ich gerade auf nen Schlauch?

    EDIT: Ahh, Bogenmaß etc. Das erklärt so einiges...



  • hustbaer schrieb:

    Ich dachte immer 0° sind rechts und 90° sind oben...

    nicht wenn du den Bildschirm nach links schubbst, so dass er umkippt (ohne kaputt zu gehen).
    Ist doch egal wo 0 grad sind, aber rechts hat schon Vorteile, denn darauf sind die ganzen tutorials aufgebaut.



  • Krux schrieb:

    Ist doch egal wo 0 grad sind, aber rechts hat schon Vorteile, denn darauf sind die ganzen tutorials aufgebaut.

    Eben 😉


Anmelden zum Antworten