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

08.02.2015, 12:16

SFML Problem hüpfen

Guten Tag

Ich habe ein Problem mit dem Hüpfen in SFML.

Der Spieler springt aber wenn ich die Taste loslasse ist er direkt unten.(setPosition)

Ich möchte aber gerne dass der Spieler wieder runterkommt und nicht direkt unten ist.

Hat jemand da eine Lösung?

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
const float gravity = 1.f; 
int groundHeight = 1100; 
sf::Vector2f velocity(sf::Vector2f(0, 0)); 
float jumpSpeed = 0.1f, moveSpeed = 0.1f; 
// if player press D 
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::D)) 
{ 
velocity.x = moveSpeed; 
} 
// if player press A 
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::A)) 
{ 
velocity.x = -moveSpeed; 
} 
// if player press Space 
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Space)) 
{ 
velocity.y = -jumpSpeed; 
} 

// if position of player bigger than groundheight 
if (pPlayerSprite->getPosition().y - 153 > groundHeight || velocity.y < 0){ 
velocity.y += gravity; // jump 
} 
else 
{ 
pPlayerSprite->setPosition(pPlayerSprite->getPosition().x, groundHeight - 153); 
velocity.y = 0; 
} 
pPlayerSprite->move(velocity.x, -velocity.y); // move Player

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »SlyGamer« (08.02.2015, 13:45)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

08.02.2015, 12:19

|| velocity.y < 0
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]

3

08.02.2015, 12:23

Danke für deine schnelle Antwort BlueCobold.
Ich habe deinen Vorschlag getestet. Wenn ich "velocity < 0" wegmache, springt er gar nicht mehr.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

08.02.2015, 14:02

Die Bedingung ist unlogisch. Ich wollte Dich zum Denken anregen. Wieso glaubst Du, dass ein Test auf Geschwindigkeit und deren Richtung (denn nichts anderes zeigt das Vorzeichen) relevant ist? Und was glaubst Du kann wohl falsch sein, dass so eine Prüfung überhaupt notwendig war?
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]

5

08.02.2015, 14:57

Danke viel mals. Habe mich nochmal drangesetzt und habe das Problem gefunden. Jetzt gleitet er schön nach unten

6

08.02.2015, 15:36

Übrigens sollte es in zeile 21 eher 'greater' statt 'bigger' heißen ^^

7

08.02.2015, 15:47

War auch nur provisorisch da :D

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

8

08.02.2015, 19:58

Ist die Framerate fix? Weil wie ich sehe rechnest du die Framedauer nicht mit ein.

Desweiteren scheinen die Einheiten grob in cm zu sein (Spritehöhe 153), vielleicht ist eine Gravitation von 1 da eher unangemessen...

9

08.02.2015, 21:21

Hallo birdfreeyahoo
Die Framerate ist fix. Dafür habe ich extra eine Funktion erstellt.

C-/C++-Quelltext

1
2
3
4
5
 float Framework::getFrameTime() 
{ 
mFrameTime = pFrameClock->getElapsedTime().asSeconds(); 
pFrameClock->restart();return mFrameTime; 
}

10

08.02.2015, 21:29

Ich habe noch eine Frage. Ich weiss wie ich überprüfen kann wann der Spieler in der Luft ist aber ich weiss nicht wie ich das machen kann, dass ich nicht mehr die Leertaste drücken darf.

Kann mir irgendjemand helfen?

Werbeanzeige