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
C-/C++-Quelltext |
|
1 2 |
/* Keep the compiler happy */ return(0); |
Community-Fossil
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 |
struct vec2{ float x, y; void rotate(float deg){ x = cosf(deg)*x-sinf(deg)*y; y = sinf(deg)*x+cosf(deg)*y; } }; class Panzer{ private: vec2 direction; public: Panzer(){ direction.x = 1; direction.y = 0; } void onA(float deltaTime){ direction.rotate(10*deltaTime); } void onD(float deltaTime){ direction.rotate(-10*deltaTime); } }; |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (22.04.2014, 21:53)
C-/C++-Quelltext |
|
1 2 |
x += PLAYER_SPEED * (sqrtf(2.0f)*0.5f) * dt; y += PLAYER_SPEED * (-sqrtf(2.0f)*0.5f) * dt; |
Zitat
Ich vermute, dass das Problem eher bei einer fehlerhaften Zuweisung bei SFML liegt, als bei irgend einer mathematischen Berechnung.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
if(sf::Keyboard::isKeyPressed(sf::Keyboard::W)) { sf::Vector2f v(100.f*step.asSeconds(), 100.f*step.asSeconds()); float alpha=(((PlayerSprite.getRotation()+45)*3.1415926535897f)/180.f); PlayerSprite.setPosition(PlayerSprite.getPosition()+sf::Vector2f(v.x*std::cos(alpha) - v.y*std::sin(alpha), v.x*std::sin(alpha) + v.y*std::cos(alpha))); } |
C-/C++-Quelltext |
|
1 |
PlayerSprite.setOrigin (PlayerSprite.getPosition().x+PlayerSprite.getTexture()->getSize().x/2, PlayerSprite.getPosition().y+PlayerSprite.getTexture()->getSize().y/2); |
C-/C++-Quelltext |
|
1 |
PlayerSprite.setOrigin(PlayerSprite.getTexture()->getSIze()/2.f); |
1. Ich habe gegoogelt wie man den exakten Wert von PI verwenden kann und kam in ein andres Forum wo math.h verwendet wurde. Dies funktioniert allerdings nur wenn ich das #define _USE_MATH_DEFINES definiere.@Swoerm: Warum benutzt du math.h, benutzt #defines für Konstanten, deklarierst Variablen viel zu früh?
Dieser Code bewirkt bei mir gar nichts. Der Spieler bewegt sich kein Stück. Allerdings weiß ich nicht genau was du mit step.asSeconds() meinst.Folgenden Code eben noch getestet, funktioniert wunderbar. Ziemlich ähnlich mit deinem wenn du dir die komplette Version anguckst...
C-/C++-Quelltext |
|
1 2 |
/* Keep the compiler happy */ return(0); |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
math.h ist C. In C++ inkludiert man cmath.1. Ich habe gegoogelt wie man den exakten Wert von PI verwenden kann und kam in ein andres Forum wo math.h verwendet wurde. Dies funktioniert allerdings nur wenn ich das #define _USE_MATH_DEFINES definiere.
Nein. Sie sind für Makros da und für Präprozessor-Anweisungen. Für Konstanten gibt es "const". Define kennt keinen Datentyp. Const schon.2. Was ist an #defines für Konstanten so schlimm? Dafür sind sie doch da, oder?
Deklaration mehrere Zeilen vor ihrer konkreten Verwendung oder Initialisierung. Unnötig. Schwer zu lesen.3. Wie meinst du, dass Variablen zu früh deklarieren?
C-/C++-Quelltext |
|
1 2 3 4 5 |
PlayerSprite.setOrigin (PlayerSprite.getPosition().x+PlayerSprite.getTexture()->getSize().x/2, PlayerSprite.getPosition().y+PlayerSprite.getTexture()->getSize().y/2); // zu: PlayerSprite.setOrigin(PlayerImage.getSize().x * 0.5f, PlayerImage.getSize().y * 0.5f); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
x += static_cast<float> ((PLAYER_SPEED * cos ( PlayerSprite.getRotation() * (M_PI / 180) )) * dt); y += static_cast<float> ((PLAYER_SPEED * -sin ( PlayerSprite.getRotation() * (M_PI / 180) )) * dt); // zu: x += static_cast<float> ((PLAYER_SPEED * cos((PlayerSprite.getRotation() - 90.0f) * (M_PI / 180))) * dt); y += static_cast<float> ((PLAYER_SPEED * sin((PlayerSprite.getRotation() - 90.0f) * (M_PI / 180))) * dt); |
C-/C++-Quelltext |
|
1 2 |
/* Keep the compiler happy */ return(0); |
Alter Hase
Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy
Werbeanzeige