![]() |
Jetzt aber: Rotierte bewegung
Hiho,
da ich damals vielleicht noch etwas wenig Mathe konnte, wollte ich nun alles neu anpacken: Das "rotierte" Zeichnen und Bewegen von Dingen wie Autos etc. Hab zwar bis heute keinen Kosinus, Sinus oder sonstwas gehabt, aber nun hab ichs zumindest mal hinbekommen. Ein "Fehler" hat es aber noch: Wenn ich den Spieler bewege, sieht das immer so abgehackt aus. Kann man das nicht irgendwie ändern? Ich gehe wie folgt vor: Ich hab einen DXTImer, in dem per GetAsyncKeyState auf Links/Rechts geprüft wird und die Variable "PAngle" dementsprechend +/- 0.02 gesetzt wird. Meine Prozedur zum neu-Berechnen und Zeichnen sieht wie folgt aus:
Delphi-Quellcode:
PPos ist ein TPoint und PAngle ein Extended.
procedure TForm1.Draw;
begin if not Form1.DXDraw1.CanDraw then Exit; PPos.X := Floor(PPos.X + (sin(PAngle) * 1.5)); PPos.Y := Floor(PPos.Y - (cos(PAngle) * 1.5)); Form1.DXDraw1.Surface.Fill(0); Form1.DXImageList1.Items.Find('Player').DrawRotate(Form1.DXDraw1.Surface, PPos.X, PPos.Y, 10, 10, 0, 0.5, 0.5, Floor(PAngle)); Form1.DXDraw1.Flip; end; Wie gesagt, das alles funktioniert zwar, ist aber sehr abgehackt. What do do? Danke schonmal air P.S.: Das alles ist nur ein Testprojekt für mich, also noch nicht so sehr darauf achten, dass ich das nicht in ein record packe oder so :stupid: |
Re: Jetzt aber: Rotierte bewegung
hi,
brauchen die sin() und cos() Funktionen nicht das Bogenmaß anstatt den Winkel als Parameter ? cu, stefan2005 |
Re: Jetzt aber: Rotierte bewegung
Zitat:
Hab also sowohl DegToRad als auch RadToDeg probiert. DegToRad: --------- Gehtr garnimmer links/rechts RadToDeg: --------- Nervöses Zuckeln im Quadrat ;) Edit: Oh..RadToDeg stimmt wohl. Nur 0.02 is dafür viel zu hoch. Werds nochmal testen Edit2: ok..scheint zu gehen. Aber woran liegt es, dass wenn ich z.b. links gedrückt halte, keine kreisförmige Bahn entsteht sondern mehr so in eine Richtung gezogene Spirale? Edit3: Sorry *g* Kleine Zwischenfrage. Ich mach grade die Kollisionsabfrage für die Wände. Für links/rechts (X-Achse) funzt es gut, indem ich PAngle auf -PAngle setze. Aber wie sieht es für die Y-Achse aus? Hab auch versucht, 180° abzuziehen / zu addieren |
Re: Jetzt aber: Rotierte bewegung
*push*
Die Frage bleibt, wie ich den Winkel beim Abprallen an der Y-Achse ändern muss. Habe schon ziemlich viel probiert :| Das Problem, einfach einen Winkel zuzufügen/abzuziehen ist ja, dass der Winkel ja nicht In Grad gegeben ist. D.h. von 90 zu 90, 5 ist das vllt schon eine ganze Umdrehung. Habe morgen vor, meinen Mathelehrer zu fragen, mir mal einen Crashkurs in Trigonometrie zu geben. Aber könnte mir trotzdem jemand helfen? :stupid: air |
Re: Jetzt aber: Rotierte bewegung
Hi,
Zitat:
verwende doch den Satz von Pythagoras. :wink: (Den kannst du ja hoffentlich. :angel2: ) MfG Marc P.S.: Sorry, wenn ich jetzt deinen bisherigen Code völlig verändere. :duck: |
Re: Jetzt aber: Rotierte bewegung
@Chegga: Beim Drehen der Figur mit den Pfeiltasten könnte es dann aber etwas schwer werden :wink: .
@Airblader: Also der Nebenwinkel im Bogenmaß?
Delphi-Quellcode:
Alpha := Pi - Alpha
|
Re: Jetzt aber: Rotierte bewegung
Naja..langsam wird alles merkwürdiger.
Mal eine Info: Der Winkel muss nichtmal um 1 geändert werden um eine vollständige Drehung zu erhalten. Stimmt denn die Rechnung für die neuen Positionen überhaupt?
Delphi-Quellcode:
@Khabarakh
PPos.X := Floor(PPos.X + (sin(RadToDeg(PAngle)) * 3.5));
PPos.Y := Floor(PPos.Y - (cos(RadToDeg(PAngle)) * 3.5)); Wenn ich PAngle := PI - PAngle; setze, funzt es auch nicht |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz