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

16.01.2010, 09:42

SFML Sprite Sprung!

Hallo,

Ja, ich finde es selber lächerlich, dieses Thread zu öffnen,
aber ich finde echt keine lösung, hab echt ganz schön viel versucht,
und irgendwie ist es nicht so leicht, oder ich komm einfach nicht drauf.

Ich programmiere gerade wiedermal ein neues Projekt, diesmal
wollte ich mich mehr bemühen so professionell wie möglich
zu arbeiten, Klassen, funktionen und alles zu benutzen.
Es sieht für meinen Geschmack garnicht so schlecht aus,
jedoch fehlt mir echt die wichtigste Funktion für das Spiel,
undzwar das Springen, es solln Jump and run sein.

So sieht die Jump funktion aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void CJumper::Jump(void)
{
    int Startposition = 1;
    float ElapsedTime = App.GetFrameTime();
    if(App.GetInput().IsKeyDown(sf::Key::Space))
    {
        for(float Sprung = 0; Sprung < 10; Sprung++)
        {
        Sprites[0].Move(0, Sprung * ElapsedTime);
        if(Sprung > 8)
        {
        Sprites[0].Move(0, -Sprung * ElapsedTime);   
        }
        }
    }
}


Hab leider nicht die vorherigen versuche, kann aber sagen
was ich alles noch versucht hab. Undzwar habe ich als aller
erstes versucht es so zu machen: Sprites[0].SetY(Floatwert);
und den halt zu plusen, etc. Nur dann sah es so aus
als ob er sich nach oben telepotiert, und runter kam er leider
nicht. Dann habe ich es mit ner While Schleife versucht,
anfangs hengte sich das Programm auf, wegen falscher
Bedingung, danach hatte ich das gleiche problem, dann
hab ich es auch mit sf::Clock ... versucht nur war das auch
nicht die Lösung.

Mit der jetzigen Funktion (siehe oben) passiert beim drücken der
Leertaste nur das der Sprite sich nach unten bewegt..

Hat vielleicht einer einen Denkanstoß parrat?
Ein Problem ist das bei der if Schleife
die bedingung ist das die Leertaste gedrückt sein muss,
und nicht nur einmal geklickt werden muss.
Und ein anderes Prob. das ich nicht weiß wie ich das löse.

Hoffe auf Hilfe!
Danke schonmal im Voraus!
:)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

16.01.2010, 09:50

Um einen Sprung zu simulieren kannst du z.B. eine Wurfparabel nehmen.

Zitat

Ein Problem ist das bei der if Schleife


Das Problem lässt sich lösen. Du könntest z.B. beim drücken der Taste einen Zustandswechsel anstoßen, vom aktuellen Zustand zu Springen. Und übrigens: http://if-schleife.de/

3

16.01.2010, 09:57

Ja ich glaube das if problem krieg ich schon hin.
Nur wollte ich jetzt was zur Physik und Mathematik sagen,
ich bin leider noch nicht in dem alter wo wir solche
sachen in Physik lernen. Jedoch frage ich mich immer
wie ich solche Formeln in der programmierung benutze?
Vorallem in dem Direct X Buch von David bin ich meistens
überfordert wenn ich solch riesen Formel gemetzel sehe. :?

Könntest du eventuell ein Beispiel geben wie ich jetzt
ne Formel in der Programmierung benutze?
Wäre nett. :D

4

16.01.2010, 10:52

Du musst einfach dein Sprite ständig um 9,81 m/s² nach unten bewegen, bis eine Kollision mit dem Boden stattfindet(Gravitation) und dann beim springen ihn um einen gewissen Wert nach oben ziehen, die Gravitation zieht in nachher wieder nach unten
:arrow: https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=12971&highlight=sprung
(Die Suche ist dein Freund ;) )

5

16.01.2010, 11:06

Ja nur weiß ich ja nicht wie ich jetzt sone
Formel benutze...

Pseudo Formel: v+y * ho / h[size=7]max[/size]

Wie setze ich das jetzt z.B um?
Für was steht v, y, ho, und h[size=7]max[/size]

6

16.01.2010, 11:14

Für was, die Gravitation oder der Sprung

7

16.01.2010, 11:22

Überhaupt, ich habe kein plan wie ich Formeln
in meinem Programmen/spielen benutzen kann. Wie
mache ich das algemein?

Und von wo weiß ich für was v, h, w, x ,ho, etc. steht?
v = masse etc.?

EDIT: Oder verstehe ich da was ganz falsch, kleines
Code beispiel wäre glaube ich hilfreich... :?

8

16.01.2010, 11:34

DU zeihst dein Sprite ständig um 10(gerundet) nach unten also:
Hier rechnest du die neue GEschwindigkeit aus:
v(t + dt) = v(t) - g * dt
Geschwindigkeit-=Gravitation*verstrichene Zeit

Und hier die neue Position
y(t + dt) = y(t) + v(t + dt) * dt
Position Y+=Geschwindigkeit*verstrichende Zeit

v=Die Geschwindigkeit nach oben
g=Gravitation(9.81 ger.10)
t=Zeit
dt=verstrichene Ziet
y=Position deines Sprite an der Y-Achse

(Guck bitte das nächste mal genauer in den Thread, ich habe alles nur kopiert, eingefügt und erklärt)

9

16.01.2010, 11:39

jein, du hast mich noch nicht ganz verstanden,
wie bau ich das denn jetzt in meinen Code ein?
:D

Geht doch nicht das ich einfach diese Formel einbaue, oder?

C-/C++-Quelltext

1
y(t + dt) = y(t) + v(t + dt) * dt


Sorry, das ich nicht so schnell kappiere,
aber genau was Physik und Mathe angeht wirds
für mich ein bissian schwer. :(

10

16.01.2010, 11:45

Achso, warte mal

Werbeanzeige