Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Nutze drei Kräfte:
* Gravitation
* Reibung
* Die Kraft deines Sprungs
Schon hast du realistische Bewegungen beinahe beliebiger Art.
Nutze drei Kräfte:
* Gravitation
* Reibung
* Die Kraft deines Sprungs
Schon hast du realistische Bewegungen beinahe beliebiger Art.
C-/C++-Quelltext |
|
1 2 3 4 |
bool bJump; float gravitation; float beschleunigung; float geschwindigkeit; |
Community-Fossil
Je nach dem ob ich renne oder stehe spring ich ja unterschiedlich weit Reibung werde ich erstmal weglassen. Da es ja eine Art Super Mario werden soll wird diese kleine Einheit ja denke ich mal kaum auffallen.
Wieso ignorierst du die Erklärung?
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// Konstruktor von Spieler Spieler::Spieler() { // Alle Zeiger erstmal auf NULL initialisieren m_pSpriteSpieler = NULL; bJump = false; vCity = 2000.0f; } void Spieler::ProcessMoving() { ... nach Links/Rechts laufen etc .... // Springen else if (g_pFramework->KeyDown(SDLK_SPACE) && m_yPos <= 415.0f) { m_yPos -= vCity * g_pTimer->GetElapsed(); vCity -= 100.0f; } |
Zitat
´Du kanns verticalVelocity in JEDEM Frame um einen bestimmten Wert erhöhen und ihn auf Null setzen, wenn er auf dem Boden steht.
C-/C++-Quelltext |
|
1 2 |
else if (m_yPos >= 415.0f) vCity = 2000.0f; |
Community-Fossil
C-/C++-Quelltext |
|
1 |
m_yPos -= vCity * g_pTimer->GetElapsed(); |
Zitat
verticalVelocity in JEDEM Frame um einen bestimmten Wert erhöhen
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »NachoMan« (12.07.2011, 14:06)
Achso. 2000 = 0?
Dann ist alles klar!
C-/C++-Quelltext |
|
1 2 3 4 5 |
else if (m_yPos >= 415.0) { m_yPos = 415.0f; vCity = 2000.0f; } |
Community-Fossil
Aber vCity muss doch auf 2000. Das ist doch auch der Startwert.
Aber vCity muss doch auf 2000. Das ist doch auch der Startwert.
Ich sag dir aber, dass es falsch und unlogisch ist! Wie kommst du gerade auf 2000?
hab oben editiert.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
void Spieler::ProcessMoving() { /* Diese Klasse steuert den Spieler ++++ Optionen für Steuerung: + Links, Rechts (Pfeiltasten links und rechts) + Springen (Leertaste) ++++ */ // Nach Links gehen if (g_pFramework->KeyDown(SDLK_LEFT)) { m_xPos -= 100.0f * g_pTimer->GetElapsed(); m_AnimPhase -= 10.0f * g_pTimer->GetElapsed(); } // Nach Rechts else if (g_pFramework->KeyDown(SDLK_RIGHT)) { m_xPos += 100.0f * g_pTimer->GetElapsed(); m_AnimPhase += 8.0f * g_pTimer->GetElapsed(); } // Springen else if (g_pFramework->KeyDown(SDLK_SPACE) && m_yPos <= 415.0f) { m_yPos -= vCity * g_pTimer->GetElapsed(); vCity -= 100.0f; } else if (m_yPos >= 415.0) { m_yPos = 415.0f; vCity = 2000.0f; } // Spieler wurde nicht bewegt else { if (m_AnimPhase > 100.0f) { m_AnimPhase -= 60.0f *g_pTimer->GetElapsed(); } if (m_AnimPhase < 0.0f) { m_AnimPhase += 60.0f * g_pTimer->GetElapsed(); } } } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »AcidKiller« (12.07.2011, 14:24)
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dennis-.-« (12.07.2011, 15:14)
also wie groß vCity sein muss hängt davon ab wie schnell dein rechner ist, das ist an sich schonmal keine gute lösung.
der grund ist, dass du das mit der verstrichenen zeit multiplizierst. ist diese zu kurz (=schnellerer rechner) gibt es rundungsfehler und es kommt 0 raus.
Ganz allgemein ist ein Sprung auch keine gleichm. Bewegung nach oben und danach eine gleichm. Bewegung nach unten, sondern eher eine Kurve wo die x-Achse die Zeit ist. Man hat da so verschieden Kräfte wie die Sprungkraft und die Gravitation die gegeneinander wirken. Wenn du einen Sprung haben willst der "richtig" aussieht solltest du dir das vielleicht nochmal angucken.
gruß
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »AcidKiller« (12.07.2011, 14:47)
Community-Fossil
Kann ungefär nachvollziehen warum
m_yPos -= vCity * g_pTimer->GetElapsed();
nicht in die if Bedingung darf...Aber weiss jetzt grad auch nicht so recht wo sie sonst hinsoll. Ich muss ja trotzdem irgendwie die Verbindung zur gedrückten Space-Taste haben....
Zum Beispiel würde mich jetzt halt noch interessieren waru meine Figur immer stehen bleibt, sobald ich SPace los lasse? Bzw. Wie kann man das verhindern? Ich will Space 1x drücken und dann soll der Sprung durchgeführt werden...
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »NachoMan« (12.07.2011, 22:04)
Werbeanzeige