Beschleunigung in C++



  • Habe folgenden Code...
    Prinzipiell geht es um eine Beschleunigung und Abbremsberechnung.
    Irgendwo steckt der Fehler, nur seh ich ihn nicht.
    Die Bedingungen bei xKeyDown(KEY_UP) und xKeyDown(KEY_DOWN) entsprechen den Cursortasten in meinem Fall.
    Erwünscht ist eine Beschleunigung bzw. Erhöhung des Wertes Speed bei Tastendruck nach oben(UP) respektive Verringerung bei Tastendruck unten(DOWN)
    Und falls keine BTaste gedrückt wird, allg. bis zum Stillstand bzw. Wert 0 Erreichen eine langsame speed Verringerung.

    Ich sehe den Fehler einfach nicht.

    float speed;
        if (xKeyDown(KEY_UP))
    	{
    		speed = speed -1;
    	}
    	else if (xKeyDown(KEY_DOWN))
    	{
    		 speed = speed +1;
    
    	}
    	else
    	{ 
    		if (speed>0) speed=speed-0,01;
    		if (speed<0) speed=speed+0,01;
    		if ((speed<0,1)&&(speed>0)) 
    		{ 
    			speed = 0;
    		}
    	}
    


  • 2 Dinge.

    1. "ich seh den Fehler nicht" ist nichtmal Ansatzweise eine Fehlerbeschreibung.

    2. wenn du die Geschwindigkeit erhöhen willst, solltest du wahrscheinlich eher addieren statt subtrahieren

    3. Fließkommazahlen werden mit "." geschrieben, nicht mit ",". Der Komma-Operator macht bei dir ganz schlimme Dinge.



  • 0.1 statt 0,1



  • hab das koma rausgenommen, dennoch noch nicht wie es soll....
    geht mir ja nur um die speed berechnung...
    könnte mir jemand von euch sagen/zeigen wo der fehler liegt?


  • Mod

    "dennoch nicht wie es soll" ist natürlich eine viel bessere Fehlerbeschreibung als "ich seh den Fehler nicht". Ich verstehe nicht, wieso dir trotzdem niemand helfen kann.



  • na weil es keine fehlermeldung gibt und ich lediglich fragte ob mir jemand bei dieser beschleunigungs und abbremsgeschichte helfen kann.
    ich versuch es selber nochmal...aber heut nimmer...
    dachte hier kann mir jemand helfen



  • Dein Code sieht richtig aus. Bis vielleicht aufs uninitialisierte float speed; m aber das haste bestimmt nicht so da stehen.



  • doch steht so da, hatte es aber auch mit 0 initialisiert, aber funktionierte dennoch nicht wie gewünscht.



  • -> Was ist gewünscht?

    -> Was genau passiert?

    So langsam sollte doch Mal angekommen sein, dass Du etwas expliziter werden musst. 😉



  • Beschreibe mal, was tatsächlich passiert, und was Du eigentlich erwarten würdest.



  • naja aber was er da macht hat auch nichts mit beshcleunigung zu tun sondern mit der geschwindigkeit
    velocity <---> acceleration



  • Wenn Cursortaste nach oben gedrückt wird, soll sich speed erhöhen.
    Wenn die Taste losgelassen wird, aber nicht sofort auf 0 runter sondern eben langsam sinken im Wert.
    Das gleiche bei Cursortaste nach unten gedrückt wird.

    Eben Beschleunigung und Abbremsen, wobei speed der Geschwindigkeit entspricht.



  • Keydown und Keyup werden nur einmalig ausgelöst. Dein Code klappt nur, wenn sie dauerhaft so laufen. Mach's einfach so:

    bool keyUpDown = false; // als Attribut der Klasse
    
    if(xKeyDown(KEY_UP))
        keyUpDown = true;
    
    if(xKeyUp(KEY_UP))
        keyUpDown = false;
    
    if(keyUpDown)
        speed += 0.1;
    else
    {
        speed -= 0.1;
        if(speed < 0)
            spped = 0.;
    }
    
    // Analog für KEY_DOWN, wobei ich mich frage, was bei gleichzeitigem Drücken geschehen soll
    

Anmelden zum Antworten