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
AutocogitoGruß, TGGC (Das kommt gut)
-
so leid es mir tut
ich kann damit nichts anfangenkö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
AutocogitoGruß, TGGC (Das kommt gut)