jump n run- sprung problem



  • hallo ich möchte irgendwann mal ein kleines 2d jump n run programmieren wenn ich soweit bin
    nun habe ich folgendes problem wie erreiche ich dass meine spielfigur immer gleich hoch springt??

    ich versuche grad ein kleines testprogramm zu schreiben das sich nur dem vertikalem sprung widmet...
    anscheinend hab ich ein logikproblem drin ...
    ich benutz SFML:

    #include <SFML/Graphics.hpp>
    #include <iostream>
    
    using namespace std;
    
    class Programm
    {
    public:
        // Objektfelder
        sf::RenderWindow App;   // das fenster erzeugen
        const sf::Input& Input; // zum abfragen der tastenstati später
        sf::Image image;        // die eigentliche bild datei
        sf::Sprite sprite;      // das sprite das angezeigt wird
        sf::Clock jumptimer;    // brauch ich sowas??
        bool isJumping;         
        float movex;            // geschwindigkeit in x-richtung
        float movey;            77 analog in y-richtung
        float jumpy;
    
        // Konstruktoren
        Programm():  App(sf::VideoMode(800, 600, 32), "jump"),Input(App.GetInput())
        {
            image.LoadFromFile("i.png");
            sprite.SetImage(image);
            movex = movey = 0;
        }
    
        // Objektmethoden
        void startProgramm()
        {
    
            // Start game loop
            while (App.IsOpened())
            {
                // Eregnisse abfangen
                sf::Event Event;
                while (App.GetEvent(Event))
                {
                    // Close window : exit
                    if (Event.Type == sf::Event::Closed)
                        App.Close();
                }
    
                bool        Up  = Input.IsKeyDown(sf::Key::Up);
                if(Up)
                {
                    if(!isJumping)
                    {
                        jumpy = 400 * App.GetFrameTime();
                        movey += jumpy ;
                        isJumping = true;
                        jumptimer.Reset();
                    }
    
                }
    
                if(isJumping)
                {
                    if(jumptimer.GetElapsedTime() >= 0.3f)
                    {
                        movey -= jumpy;
                        jumptimer.Reset();
                        isJumping = false;
                    }
                }
    
                sprite.Move(movex, movey);
                // cout << movey << endl;
    
                App.Clear();
    
                // Display window contents on screen
                App.Draw(sprite);
                App.Display();
            }
        }
    
    };
    

    anscheinend ist das problem hierbei dass sich die framerate oft ändert und somit das sprite nie gleich hoch springt
    soll ich vielleicht
    eine abfrage einführen wie weit das sprite schon nach oben ist??

    ich hab halt einfach keine ahnung 😞



  • Physikzeit= EchtZeit
    while( SpielAktiv )
    {
        while( PhysikZeit < EchtZeit )
        {
            PhysikZeit+= Physikschritt
            DoPhysik()
        }
        DoAllenAnderenKram()
    }
    

    f'`8k

    Autocogito

    Gruß, TGGC (Das kommt gut)



  • so leid es mir tut
    ich kann damit nichts anfangen

    könntest du bitte erläutern was du machst?
    und anscheinend ist die wichtige funktion DoPhysik()

    wie würde die (minimal natürlich) ungefähr aussehen??

    alles was ich will ist das die figur nach oben springt (immer so gut wie gleich schnell und gleich hoch)
    und dann aufgrund einer art gravitaion, erstmal linear wieder runter kommt



  • Ich glaub, TGGC wollte damit sagen, dass du eine Physikengine erstellen/nutzen soltlest, die derlei Dinge anhand von Parametern an den Objekten tut- unabhängig vom Rendering selber.

    In jedem Durchlauf deines Spieles prüft diese Engine dann, ob an einem Objekt irgendwas zu ändern ist. Im Einfachsten Falle prüfst du für jedes Objekt, ob es in der Luft schwebt und beschleunigst es im Zweifelsfalle um 9.81m/s².
    Anschließend kommt der Rest deines Spieles dran..



  • In DoPhysik kommt halt alles rein, was unabhaengig von der Framerate sein soll. f'`8k

    Autocogito

    Gruß, TGGC (Das kommt gut)


Anmelden zum Antworten