Änderung pro Zeit
-
Hallo,
ich habe ein Programm das mir den Namen meines USB Joysticks ausgibt, die Anzahl der Achsen und die Anzahl der Buttons. Den Code kann man sich kostenlos mit der "plib" downloaden. Außerdem zeigt mir das Programm an wohin ich meinen Joystick gerade bewege. Durch eine Endlos-While-Schleife werden in einem Command Window die Werte für die Achsen ausgegeben. Also wenn ich den Joystick nach rechts bewege, wird der Wert der Achse 0 auf +1.0 gesetzt.
Jetzt ist es ja momentan so, dass wenn der Joystick in eine Richtung gedrückt wird, das wenn ich jetzt direkt darüber ein Flugzeug steuern würde, es urplötzlich in diese Richtung kippen würde. In Spielen ist es ja aber eher so dass das Flugzeug sich langsam in diese Richtung neigt. Ich möchte also eine Art Verzögerung einbauen. Z.b. soll das Flugzeug sich dann um 5 Grad in der Sekunde neigen. Leider komme ich einfach auf keinen Ansatz wie ich das programmieren könnte. Vielleicht hat einer eine Idee? Ich hoffe ich habe mich verständlich ausgedrückt. Ich programmiere übrigens mit VC++6.0.
Viele Grüße
Laura
-
Indem du einfach in jedem Logikschritt die Ausrichtung etwas veränderst? Zum Beispiel indem du Joystickrichtung*Faktor addierst?
-
Ja so habe ich auch schon überlegt, also wenn ich den Stick zum Beispiel ganz nach rechts drücke dass dann einfach "(1*5 Grad)pro Sekunde" gerechnet werden bzw. wenn ich ihn nur halb rüber drücke dann "(0.5*5 Grad)pro Sekunde". Meintest du das so?
Das Problem dabei ist, ich kann das einfach nicht programmiern, mir fehlt da die Erfahrung.
-
Spricht irgendwas gegen
aktuellerrollwinkel += joystickauslenkung*maximalerollgeschwindigkeit;? (mal von der physikalischen Korrektheit abgesehen)
Zu einer Flugsimulation gehören aber nicht nur solche schweren Probleme, sondern noch ganz viele einfache, nicht verzagen!

-
laura84 schrieb:
Ja so habe ich auch schon überlegt, also wenn ich den Stick zum Beispiel ganz nach rechts drücke dass dann einfach "(1*5 Grad)pro Sekunde" gerechnet werden bzw. wenn ich ihn nur halb rüber drücke dann "(0.5*5 Grad)pro Sekunde". Meintest du das so?
Genau.
Das Problem dabei ist, ich kann das einfach nicht programmiern, mir fehlt da die Erfahrung.

Dann musst du Erfahrung sammeln. Nun hast du auch eine Motivation.
Was kannst du denn schon? Wenn ich deinen Wissensstand richtig einschätze (Anfänger?), dann solltest du besser nicht mit einem Flugsimulator als erstem Programm anfangen. Um einen Flugsimulator zu schreiben, muss man sämtliche Grundlagen der Sprache einigermaßen im Griff haben. Das ist leicht die zu lernen. Ein Flugsimulator ist aber designtechnisch schon einigermaßen anspruchsvoll, da hilft es nur, viel selber zu programmieren. Der Simulator kann dann das erste "echte" Projekt werden.
Um eigenständig von 0 bis zu einem (guten) Flugsimulator zu kommen, sind schätzungsweise 6, eher 9 Monate Lernzeit nötig.
-
Ja ich bin Anfänger. Ich möchte keinen Flugsimulator programmieren. Das wäre wirklich ein bisschen zu heftig.
Ich möchte nur eine Art Anbindung programmieren. Also die Werte die mein Joystick dann ausgibt (mit der Verzögerung) sollen am Ende einfach übergeben werden. An irgend eine Anwendung, die gibt es aber noch nicht. Ich brauche also im Grunde erstmal nur eine Ausgabe der Werte, die sich mit der Zeit ändert. Das mit dem Flugsimulator habe ich jetzt eigentlich nur zur besseren Erklärung benutzt. Versteht ihr?
-
Also zum besseren Verständnis jetzt mal mein bisheriger Code:
#include <js.h> #include <windows.h> int main ( int, char ** ) { jsJoystick *js; float *ax; float aend[3]; int h; jsInit (); js = new jsJoystick (0); printf ("Joystick test program.\n"); printf ("~~~~~~~~~~~~~~~~~~~~~~\n\n"); if (js->notWorking ()) printf ("Joystick not detected\n"); else printf ("Joystick is \"%s\"\n\n", js->getName()); if (js->notWorking ()) exit (1); ax = new float [js->getNumAxes ()]; int j; printf ("+---------JS----------"); printf ("+----------------+\n"); printf ("| Btns "); for (j = 0 ; j < 3 ; j++) printf ("Ax:%d ", j); for ( ; j < 3 ; j++ ) printf (" "); printf ("|"); printf (" Aenderung |\n"); printf ("+---------------------"); printf ("+----------------+\n"); while (1) { int b; js->read (&b, ax); printf ("| %04x ", b); for (j = 0 ; j < 3 ; j++) printf ("%+.1f ", ax[j]); printf("| "); for (h = 0 ; h < 3 ; h++) //hier möchte ich die Änderung mit der Zeit { aend[h]=ax[h]*5; printf ("%+.1f ", aend[h]); } printf ("|\r"); fflush (stdout); #ifdef WIN32 Sleep (1); #elif defined(sgi) sginap (1); #else usleep (1000); #endif } getchar(); return 0; }Wie schon gesagt ich nutze die kostenlose PLIB, das Meiste habe ich also nicht selber geschrieben, ich habe den Code nur ein bisschen nach meinen Vorstellungen angepasst.
Ich denke ich brauche einen Timer um dann zu sagen gehe pro Sekunde 5 Grad weiter, aber mit Timern, Threads usw. kenne ich mich eben noch nicht so gut aus. Kann mir da wer helfen?