C++ Spielfigur hüpfen lassen



  • Siehe Physikbuch, zweite Klasse. Was heut so alles FI wird... f'`8k

    Bye, TGGC (\-/ returns)



  • Du brauchst eine Variable für die x- und y-Geschwindigkeit. Der Absprung setzt die y-Geschwindigkeit nach Oben (ins negative). Dann musst du einfach bei jedem Frame ein bisschen auf die y-Geschwindigkeit addieren, dass simuliert eine realistische Schwerkraft (Die auch ständig alles nach unten zieht). Nun musst du nurnoch darauf achten, dass bei kollision mit dem Erdboden die Y-Geschwindigkeit wieder auf Null gesetzt wird.



  • hey, erstma bitte keine Beleidigungen, ich bin immer noch gut genug um die Ausbildung zu verkürzen...

    hm... ok, das was Roland geschrieben hat hab ich im prinzip schon, und die Kurve werd ich sicha auch hinkriegen, danke 😉

    mein momentan größtes Problem ist, dass ich laut meinem Kollegen an der Stelle, an der ich Programmiere (Object.cpp, if(hge->Input_GetKeyState(HGEK_SPACE))...
    keine Schleife machen darf. d.h. aber im Moment dass ich auf Space gedrückt halten muss damit meine Spielfigur die ganze Hüpfbewegung macht.



  • Du mußt natürlich die Bewegung des Objekts an regelmäßige "Ticks" koppeln, die unabhängig von Eingaben erfolgen. Der Tastendruck löst die Bewegung nur aus, teilt der Spielfigur also mit, daß sie nun hüpfen soll; das Hüpfen selbst passiert dann "von allein".



  • crazy-smiling schrieb:

    hey, erstma bitte keine Beleidigungen, ich bin immer noch gut genug um die Ausbildung zu verkürzen...

    hm... ok, das was Roland geschrieben hat hab ich im prinzip schon, und die Kurve werd ich sicha auch hinkriegen, danke 😉

    mein momentan größtes Problem ist, dass ich laut meinem Kollegen an der Stelle, an der ich Programmiere (Object.cpp, if(hge->Input_GetKeyState(HGEK_SPACE))...
    keine Schleife machen darf. d.h. aber im Moment dass ich auf Space gedrückt halten muss damit meine Spielfigur die ganze Hüpfbewegung macht.

    dann machst du eine bool-Variable names SpringeGerade oder so, diese setzt du auf true sobald die taste gerdrückt wurde und die if abfrage für die taste sieht dann so aus:

    if(hge->Input_GetKeyState(HGEK_SPACE) || SpringeGerade)
    {
     SpringeGerade = true;
     // blabla
     if(Sprunge Zu ende oder wo es auch immer zu ende ist)
     {
      SpringeGerade = false;
     }
    }
    

    mfg.



  • In meinen Programmen lass ich eine Eigene Funktion die Tastatureingabe übernehmen, die die Eingabe auf der Tastatur dann natürlich auch auswertet, und dann ein struct zurückgibt, in dem die alle tasten mit Namen wie "jump" und "shoot" gespeichert sind. Wenn dann die variable "jump" auf 1 Steht, und kontakt zum Boden besteht, kann dann die Sprungsequenz eingeleiteitet werden. Selltest du meinen lösung ausprobieren, reicht an dieser stelle ein verändern der y Geschwindigkeit und eventuell eine Sprunganimation (die keine Höhenveränderung enthält) Gestartet werden. Die weiche Sprungkurve wird automatisch dadurch entstehen, dass die Schwerkraft das obrekt bei jedem frame (oder abhängig von der Vergangenen Zeit) ein wenig nach unten Beschleunigt. Ich empfehle wirklich die sache so anzugehen, denn es wird vieles leichter machen, und es sieht besser aus, als so ein Eckiger Sprung.

    Edit: Was ich noch vergessen habe zu sagen, ist dass die x- und y- Koordinaten in einem float oder double gespeichert werden sollten, denn sonst werden fast alle Bewegungsinformationen (die sich meist so zwischen 3 und 0 befinden) bei jeder Aktualisierung der Koordinaten weggerundet und es wird wieder unschön.



  • TGGC schrieb:

    Siehe Physikbuch, zweite Klasse. Was heut so alles FI wird... f'`8k

    Bye, TGGC (\-/ returns)

    Ich sag nur: 3 Jahre Ausbildung und ich hatt nicht eine Stunde Mathematik in der Berufsschule 😞



  • TGGC schrieb:

    Siehe Physikbuch, zweite Klasse. Was heut so alles FI wird... f'`8k

    Bye, TGGC (\-/ returns)

    Ich sag nur: 3 Jahre Ausbildung und ich hatt nicht eine Stunde Mathematik in der Berufsschule 😞



  • Hi!

    Naund? Was hat das damit zu tuen? 😛 Du hast die Grundlagen in der Schule gelernt. Alles weitere lässt sich durchaus selbst aneignen.

    grüße



  • schon blöd dass es in der Ausbildung kein MAthe mehr gibt, aba was solls...

    wollt mich nochma schnell für eure Hilfe bedanken, habs hin gekriegt 🙂 *freu*

    if(hge->Input_GetKeyState(HGEK_SPACE)||sprung==true)
    {
    
     Objectlist[i].spr->SetFrame(9);	                             
    
     if(sprung==false)
     {
       f_sprung_startpos=Objectlist[i].y;			
       sprung=true;						
       f_y=1;
     }
    
     Objectlist[i].y = Objectlist[i].y-(Objectlist[i].vy * dt)+f_y;
     f_y+=0.2;
    
    if(f_sprung_startpos<=Objectlist[i].y)
    {
      sprung=false;		
      Objectlist[i].y=f_sprung_startpos;
    }
    

    so, vielleicht nich ganz so wie ihr des gemeint hattet, aba läuft un sieht gut aus 😉 also thx!



  • TGGC schrieb:

    Siehe Physikbuch, zweite Klasse. Was heut so alles FI wird... f'`8k

    Bye, TGGC (\-/ returns)

    Aber selbst die Diplomarbeit über A* schreiben 🙄



  • Delryn schrieb:

    Aber selbst die Diplomarbeit über A* schreiben 🙄

    A* macht weniger als 5% davon aus. Ich weiss, ist nicht so leicht zu verstehen. f'`8k

    Autocogito

    Gruß, TGGC (\-/ returns)



  • ich habe so etwas auch schon einmal gemacht
    und ich habe das springen mit einer wurfparabel dargestellt:

    y = V * t * sin(w) - 0.5*G*pow(t,2);
    x = V * cos(w) * t;
    

    V = geschwindigkeit
    w = winkel
    t = zeit
    G = erdanziehungskraft ( 9,8 )

    du musst nur die zeit erhöhen, und die geschwindigkeit so einstellen, des er nicht zu weit fliegt *g*

    mfg
    luki



  • Au weier. Das ist absolut der Falsche Ansatz um ein Spiel halbwegs realistisch aussehen zu lassen. man sollte bevor man etwas tut nicht nur darauf Achten, dass es hinterher so in etwa so aussieht, wie im realen leben, Also eine Parabel in der Wirklichkeit entsteht bestimmt nicht deshalb, weil vor dem Wurf jemand eine Parabel ausrechnet, die das Objekt hinterher Abwandert. Eine Parabel entsteht, indem eine Durchgehende Kraft ständig an einem Ojekt zieht, und somit die bewegungsrichtung ändert.

    Eine animation eines Bildes in dem ein Objekt sich hoch und wieder Herunter Bewegt ist auch ein Komplett falscher weg einen Realistischen Sprung hinzubekommen.


Anmelden zum Antworten