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

TSM

Frischling

  • »TSM« ist der Autor dieses Themas

Beiträge: 30

Beruf: Schüler

  • Private Nachricht senden

1

12.04.2014, 14:20

SFML Springen !?!

Hi,
Als erstes ich habe schon ganz viel recherchiert und hab nichts wirklich hilfreiches gefunden...
Und zwar wollte ich mit der SimpleFastMultimediaLibary (Kurz SFML) ein kleines 2D Spiel Programmieren...
Indem der Spieler ein Block ist der über andere Blöcke springen muss um am ende eine Tür oder mehr ein Portal zu betreten um ins nächste Level zu gelangen.(Nichts besonderes)
Also hab ich mich wieder mal an den PC gesetzt und die Tastatur zum glühen gebracht.
Als erstes hab ich mir mal angeschaut was ich wirklich brauche und mir alles aufgeschrieben. Darunter Kollisionen und Sprünge.
Kollisionserkennung hab ich so weit so gut schnell hinbekommen und wollte mich dann an das Springen ranmachen. Ich hab hier im Forum 2 Topics darüber gefunden.
Also das mit der ganzen Physik t dt v g usw. Da ich in der 8.Klasse bin hab ich erstmal keine Ahnung gehabt was ich damit anfangen soll also hab ich versucht mir das selbst bei zu bringen.
-Ging nicht so gut ;D
Dann hab ich mich mit Parabeln und keine Ahnung was für Funktionen auseinander gesetzt und hatte langsam die Ahnung die ich schon davor hatte XD.
Lange Rede kurzer Sinn..:
ich hab es mit Kollisionen versucht also bsp.
wenn die Maximalhöhe(des Sprungs)nicht erreicht ist bewege Spieler Y - (in SFML ist die Obere Linke ecke (0|0) )
also wenn die Max. höhe erreicht ist dann geh wieder runter also Y + bis die Min. Höhe (also der Boden) erreicht ist.
soweit so gut ... aber irgend wie Springt er einmal und dann nicht mehr also Leertaste gedrückt geht er ein stück mach oben und fertig zweites mal drücken keine Reaktion das Fenster zeigt auch keine Reaktion und Windows gibt den hervorragenden Vorschlag das Fenster doch zu schließen...
Ich hab das auch mal mit Kollisionserkennung versucht also Oben Linie unten Linie und dann im Grunde das selbe wie zuvor beschrieben...
aber... das Ergebnis ist zwar besser ist aber immer noch nicht ausreichend außerdem gibt es doch bestimmt eine einfachere Lösung des Problems. :dash:
Ich hoffe mir kann jemand helfen... ;(

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »TSM« (13.04.2014, 09:32)


Lares

1x Contest-Sieger

  • Private Nachricht senden

2

12.04.2014, 14:38

Um dir bei deinem speziellen Problem zu helfen müsste man den relevanten Code sehen.

Vllt hilft dir diese Seite als Denkanstoß wie man das ganze implementieren kann:
http://wiki.allegro.cc/index.php?title=H…_in_platformers

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Lares« (12.04.2014, 14:50)


3

12.04.2014, 16:09

Mal bezogen auf das mit dem Fenster schließen: Du darfst die Events auch nicht vergessen.

C-/C++-Quelltext

1
2
3
4
5
//blabla 
sf::Event event;
while(RenderApp.pollEvent(event))
    if(event.type == sf::Event::Closed)
        RenderApp.close();


MfG
Check

TSM

Frischling

  • »TSM« ist der Autor dieses Themas

Beiträge: 30

Beruf: Schüler

  • Private Nachricht senden

4

12.04.2014, 16:19

Um dir bei deinem speziellen Problem zu helfen müsste man den relevanten Code sehen.

Vllt hilft dir diese Seite als Denkanstoß wie man das ganze implementieren kann:
http://wiki.allegro.cc/index.php?title=H…_in_platformers
Danke für die schnelle Antwort. Zum Link: So eine Funktion hab ich im Grunde doppelt versucht, einmal mit dem wert also falls position y kleiner ist als max höhe usw. Dann hab ich nochmal mit einer Kollisionserkennung das selbe versucht also zwei Linien oben und unten falls die obere Linie berührt wird bewege dich nach unten bis die untere Linie berührt wird.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

12.04.2014, 16:24

Ich habe gerade auch diesem Algorithmus der Seite verwenden und klappt wunderbar. Eine kleinigkeit hat noch gefehlt, nämlich irgendwann muss isOnSolidGround auf false gesetzt werden, und das habe ich einfach dann gemacht, wenn das Springen beginnt. Nicht ganz richtig, aber es klappt zumindest erstmal.

TSM

Frischling

  • »TSM« ist der Autor dieses Themas

Beiträge: 30

Beruf: Schüler

  • Private Nachricht senden

6

12.04.2014, 17:21

Wenn ich das mit der zeit machen würde also :
wenn Space(Leertaste) gedrückt ist und dann while schleife dran so lange die vergangene Zeit nicht > 2 sek. ist gehe nach oben
(wenn die Zeit also über 2 sek. ist dann geht Player nach unten bis zum Min. Y also Boden.

Das sollte doch eigentlich funktionieren da sich der Spieler sowieso vom Code aus gesehen sowieso die ganze Zeit in Richtung X+ also nach rechts bewegt. Ich denke somit sollte es eine wunderschöne kurve ergeben oder? :hmm:

TSM

Frischling

  • »TSM« ist der Autor dieses Themas

Beiträge: 30

Beruf: Schüler

  • Private Nachricht senden

7

12.04.2014, 17:33

Mal bezogen auf das mit dem Fenster schließen: Du darfst die Events auch nicht vergessen.

C-/C++-Quelltext

1
2
3
4
5
//blabla 
sf::Event event;
while(RenderApp.pollEvent(event))
    if(event.type == sf::Event::Closed)
        RenderApp.close();


MfG
Check

Mal bezogen auf das mit dem Fenster schließen: Du darfst die Events auch nicht vergessen.


Keine Sorge die ist drin das Fenster ist ja voll im Tackt bis ich dieses verdammte Springen versuche :cursing: :dash:

TSM

Frischling

  • »TSM« ist der Autor dieses Themas

Beiträge: 30

Beruf: Schüler

  • Private Nachricht senden

8

12.04.2014, 17:36

Habt ihr vielleicht eine Idee Formel oder Code was auch immer... Ich meine ich bin ja nicht der erste der ein Jump and Run Spiel schreibt oder..? :D

TSM

Frischling

  • »TSM« ist der Autor dieses Themas

Beiträge: 30

Beruf: Schüler

  • Private Nachricht senden

9

12.04.2014, 18:15

Sooo.. Problem behoben... :vain: war eigentlich ganz einfach ;)
Wenn jemand die Lösung braucht : Datei mit angehangen

PS:: schreibt mal rein das rect1.move(0,5); und dann gucken wie es dann ausschaut ;D
»TSM« hat folgende Datei angehängt:
  • main.cpp (3,45 kB - 102 mal heruntergeladen - zuletzt: 24.04.2024, 00:19)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TSM« (12.04.2014, 18:31)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

12.04.2014, 18:17

Ich denke somit sollte es eine wunderschöne kurve ergeben oder?
Edit: Das ergibt eine Kurve, die aber immer steiler nach oben wird, wenn man die Space-Taste gedrückt lässt. Ich weiß nicht so recht, ob Du das willst.
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]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (12.04.2014, 18:43)


Werbeanzeige