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

Crazy007

Treue Seele

  • »Crazy007« ist der Autor dieses Themas

Beiträge: 186

Wohnort: Tirol

  • Private Nachricht senden

1

12.01.2013, 14:53

Translation im Verhältnis zu Rotation

Hallo,
ich arbeite gerade mit der SFML an einem 2d-racing game.
Ich kann mein Auto-Sprite nur entlang der x und y achse bewegen mit sprite.move(x,y).
Gibt es vielleicht eine Formel mit der man das Auto im Verhältnis zur Rotation nach vorne und hinten bewegen kann?
Danke im Voraus,
Crazy007
Der Error sitzt meistens vor dem Bildschirm! :D

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

2

12.01.2013, 15:16

Du hast den Rotationswinkel, sowie den Speed. Jetzt nur noch mit Sinus und Cosinus arbeiten und du kannst auch weiterhin mit sprite.move(x, y) arbeiten ;)

Tipp: Speed = Hypotenuse.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

3

12.01.2013, 15:20

Sinus und Kosinus ist das Stichwort:

(englische Wikipedia hat die besseren Bilder:)
http://en.wikipedia.org/wiki/Sine#Relati…the_unit_circle
http://upload.wikimedia.org/wikipedia/co…_circle.svg.png

Die Funktionen sind in der Standardbibliothek:
http://en.cppreference.com/w/cpp/numeric/math/sin

Aber Achtung: Der Winkel ist in Bogenmaß und nicht in Gradmaß:
http://de.wikipedia.org/wiki/Winkel#Wink…f.C3.BCr_Winkel

http://de.wikipedia.org/wiki/Radiant_%28…adiant_und_Grad
Lieber dumm fragen, als dumm bleiben!

Crazy007

Treue Seele

  • »Crazy007« ist der Autor dieses Themas

Beiträge: 186

Wohnort: Tirol

  • Private Nachricht senden

4

12.01.2013, 16:25

:dash: Ich bin so dumm! :D
Danke an alle!
Der Error sitzt meistens vor dem Bildschirm! :D

Crazy007

Treue Seele

  • »Crazy007« ist der Autor dieses Themas

Beiträge: 186

Wohnort: Tirol

  • Private Nachricht senden

5

12.01.2013, 17:40

Ok heute sitz ich wirklich auf der Leitung!
Ich habs jetzt so versucht:

C-/C++-Quelltext

1
sprite.move(cos(sprite.getRotation()), sin(sprite.getRotation()));

Funktioniert nicht! Das Auto bewegt sich nie in die richtige Richtung!
Sorry dass ich hier so banale Fragen Stelle(Sinus, Kosinus ist doch schon etwas länger her :D ).
Könnt mich bitte jemand auf den richtigen Weg führen?
Der Error sitzt meistens vor dem Bildschirm! :D

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

12.01.2013, 17:59

Wie bewegt sich dein Fahrzeug denn und wie sollte es sich eigentlich bewegen? In welchen Fällen bewegt sich das Fahrzeug wie? Da gibt es vermutlich Unterschiede. Teste das mal genau, wann sich dein Fahrzeug wie verhält. Dann solltest du dir noch mal angucken wie sich Sinus und Cosinus verhalten. Kannst du dir im Prinzip einfach mal die Kurven angucken.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Crazy007

Treue Seele

  • »Crazy007« ist der Autor dieses Themas

Beiträge: 186

Wohnort: Tirol

  • Private Nachricht senden

7

12.01.2013, 18:16

Ich weiß jetzt dass ich ganz falsch auf dem Weg bin. :(
Manchmal fährt das Auto schneller manchmal langsamer, manchmal fährt es in die entgegengesetzte Richtung usw.
Zumindest weiß ich jetzt dass vieles falsch ist und ich die rotation usw. neu machen muss
Der Error sitzt meistens vor dem Bildschirm! :D

8

12.01.2013, 18:43

Ist der Winkel auch in Bogenmaß?
Sind die Werte in einem vernünftigen Bereich? (sinus bildet auf [-1; 1] ab).
Akzeptiert move() floats? Ints könnten abgeschnitten und ganz zu 0 werden.
Lieber dumm fragen, als dumm bleiben!

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

12.01.2013, 19:02

getRotation liefert einen Winkel im Gradmaß. sin und cos brauchen Bogenmaß.
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]

Crazy007

Treue Seele

  • »Crazy007« ist der Autor dieses Themas

Beiträge: 186

Wohnort: Tirol

  • Private Nachricht senden

10

12.01.2013, 21:33

Danke Leute endlich funktionierts!
Ich hatte die Gradmaße :D
Also falls jemand das gleiche Problem hat hier der funktionierende Code:

C-/C++-Quelltext

1
sprite.move(cos((sprite.getRotation()/180)*3.1415926535), sin((sprite.getRotation()/180)*3.1415926535));
Der Error sitzt meistens vor dem Bildschirm! :D

Werbeanzeige