Du bist nicht angemeldet.

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

1

11.07.2011, 13:12

Springen bei einem Jump n Run Spiel

Hi, ich hab eine Frage bezüglich des Springens bei einem JnR Spiel. Hab jetzt viel alleine rumm gebastelt und auch shcon ein paar Tipps bekommen aber so ganz funktioniert das immer noch nicht^^ Erstmal mein Code und dann das Problem dazu^^

C-/C++-Quelltext

1
2
3
4
5
6
    // Springen
    else if (g_pFramework->KeyDown(SDLK_SPACE) && m_yPos <= 415.0f && !g_pFramework->KeyDown(SDLK_RIGHT))
    {
            m_yPos -= verticalVelocity*g_pTimer->GetElapsed();
            verticalVelocity -= 100.0f;
    }


Drückt man jetzt die Leertaste und hält sie auch gedrückt springt die Figur wie gewollt hoch und kommt auch wieder runter. Leider nur einmal. verticalVelocity wird im Konstruktor auf 2000 gesetzt. Jetzt hab ich das Gefühl das ich diesen Startwert irgendwie neu setzen muss nach jedem Sprung aber wo genau? Und das 2. Problem ist, dass wenn ich die Leertaste mitten im Sprung los lasse, die Figur einfach in der Luft stehen bleibt^^ Ein paar Tips wären nett =)


**m_yPos = 415.0 ist der Boden praktisch also mein 0 Wert auf dem die Figur steht.
Gruß
AK

2

11.07.2011, 13:41

Also hab jetzt nochn bisl verbessern können, das Ergebniss ist allerdings sehr bescheiden xD

Meine Funktion zum Springen schaut nun so aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
else if (g_pFramework->KeyDown(SDLK_SPACE) && m_yPos <= 415.0f && !g_pFramework->KeyDown(SDLK_RIGHT))
    {
            m_yPos -= verticalVelocity*g_pTimer->GetElapsed();
            verticalVelocity -= 100.0f;
            if(SDL_KEYUP)
                bJump = true;
    }

else if (bJump == true)
    {
        m_yPos = 415.0f;
        verticalVelocity = 2000.0f;
        bJump = false;
    }


Vllt noch jemand eine bessere Idee? Denn wenn man jetzt die Leertaste gedrückt hält, springt mein Charakter wie ein Flummy hoch und runter xD Wäre zumindest nicht schlecht das ganze zu verlangsamen.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

3

11.07.2011, 13:47

Du kanns verticalVelocity in JEDEM Frame um einen bestimmten Wert erhöhen und ihn auf Null setzen, wenn er auf dem Boden steht. Schon hast du eine Schwerkraft implementiert. Wenn er Springt setzt du die geschwindigkeit einfach auf einen negativen Wert.

Hast du einen Grund mit der SDL zu arbeiten oder kennst du einfach keine gute Alternative?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

4

11.07.2011, 13:56

Also das mit dem verticalVelocity neu setzen auf 2000 funktioniert bei mir nur wenn cih es wie im letzten Post mache mit der Abfrage ob die Leertaste losgelassen wurde.
Ja die SDL benutze ich weil ich erstmal einen Einstieg haben wollte... Ursprünglich wollte ich mit OpenGL arbeiten. Hatte damals dann den Einstieg in die SDL erstmal gemacht. Und dieses JnR ist jetzt halt sone Art Projekt^^

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

5

11.07.2011, 14:01

was soll das eigentlich bewirken?

C-/C++-Quelltext

1
if(SDL_KEYUP)

Ist das nicht eine Konstante?

Schau dir mal die SFML an, die ist wesentlich einfacher zu bedienen und Finger weg von den Singletons!
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

6

11.07.2011, 14:07

Werd ich mir ma ansehen. Aber erstmal das Springproblem lösen...das ist ja relativ unabhängig^^

SDL_KEYUP benutz ich um abzufragen ob die Leertaste wieder losgelassen wird. Wenn ja dann alles zurück auf Startinitialisierung...Mache ich das nicht kann ich wenn ich das Programm starte, einmal Springen, und dann nicht mehr xD

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

7

11.07.2011, 14:17

SDL_KEYUP hat immer den Wert 3.
Diese Zeile bewirkt also überhaupt nichts.
Du kannst herausfinden ob die Taste losgelassen wurde indem du speicherst, dass sie gedrückt wurde. Wenn sie im nächsten Frame nichtmehr gedrückt ist, wurde sie vermutlich los gelassen. :thumbsup:
Versuch es mal so zu lösen wie ich es beschrieben habe.

Allgemein ist ein Jump'n'Run für einen Anfänger sehr Schwierig. Vielleicht solltest du als erstes Projekt etwas leichteres nehmen.
Wieso eigentlich reines OpenGL?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

8

11.07.2011, 14:28

Weiss nicht, kenn mich nicht mit der OpenGL so gut aus und hab gelesen und gehört das OGL so mit das beste sein soll...Kann es selber leider nicht beurteilen, denn ausser ein paar tutorials habe ichzu diesem Thema noch nichts gemacht^^

Ja ich werd noch ein bisschen rumm probieren. Irg wie muss das ja funktionieren^^

Beiträge: 721

Wohnort: /dev/null

Beruf: Software-Entwickler/Nerd

  • Private Nachricht senden

9

11.07.2011, 23:48

Nutze drei Kräfte:
* Gravitation
* Reibung
* Die Kraft deines Sprungs

Schon hast du realistische Bewegungen beinahe beliebiger Art.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

12.07.2011, 07:00

Reibung ist für die Sprünge allerdings vernachlässigbar.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige