![]() |
[DX] Sprite in Richtung wandern lassen, in die es guckt
Hi,
ich hab eine klasse TAuto. Abgeleitet von ImageSpriteEx. Per Alpha drehe ich das Auto. Wie kann ich nun das Auto nach vorne fahren lassen und zwar in die richtung in die es gerade steht? *MFG* Manu |
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Stichwort ist da Vektorrechnung. Meine Idee wäre da jetzt, 2 Vektoren zu erstellen, wobei der erste die Unterseite deines Autos darstellt und der andere orthogonal zu diesem liegt. Wenn du dein Auto jetzt drehst, drehst du gleichzeitig deine Vektoren und kannst dann die nächste Position berechnen.
|
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Och "nur"?
Sorry, kenn mich damit nicht aus. Kann ich das nicht irgendwie anders machen? Die Property Alpha ist in grad aufgeteilt. Vielleicht hilfts? *MFG* Manu :hi: |
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Hmm, mir fällt da spontan nichts Anderes ein. Vektorrechnung wäre da wohl am effektivsten.
|
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Hi,
hast du da mal ein kleines Beispiel? Bin nicht so der Mathe Profi und von Vektorrechnung hab ich nicht wirklich Ahnung. *MFG* Manu :hi: |
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Hmm, ich kenn mich mit DX nicht besonders aus, soll heißen, wenn ich dir das jetzt theoretisch erkläre, würde das nicht viel bringen. Bei OpenGL kann man Vektoren einfach mit glRotate drehen. Warte einfach noch, irgendwer wird sich im DP damit schon auskennen. :mrgreen:
|
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
*ganz vorsichtiges push* :angle2:
|
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Ich vermute mal du benutzt nur 2 Dimensionen, die Position deines Objektes liegt bei (x,y) und die Richtung wird durch den Winkel Alpha gegeben.
Dann ergibt sich die neue Position so: x := x + cos(alpha); y := y + sin(alpha); Am besten noch mit der Geschwindigkeit multiplizieren, und immer dran denken das Alpha nicht als Grad sondern als Radient gegeben sein muß. |
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Hi Ben,
jepp, ich benutz nur zwei Dimensionen. Ich werd deinen Code später mal ausprobieren, aber ich denke er wird funktionieren ;). *MFG* Manu :hi: |
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Denk dran das cos und sin ein RAD-Angabe (0 ... 2Pi) brauchen und nicht normale Gradangaben (0..360°)
Zur Umrechnung kannst du die Funktion degtorad verwenden. |
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Hi,
bin erst in der achten Klasse. Kenne mich noch nicht mit dem ganzen Zeugs (sin, cos, Deg, Rad...) aus ;). mfg Manu :hi: |
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Zitat:
|
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Hi,
scheint irgendwie nicht zu klappen. Das Auto fährt einfach irgendwo hin. Mein code:
Delphi-Quellcode:
Das drehen klappt :roll: .
procedure TAuto.DoMove(MoveCount: Integer);
begin inherited DoMove(MoveCount); if isUp in Form1.Input.States then begin X := X + degtorad(cos(Angle)) * MoveCount; Y := Y + degtorad(sin(Angle)) * MoveCount; end; if isDown in Form1.Input.States then begin X := X - degtorad(cos(Angle)) * MoveCount; Y := Y - degtorad(sin(Angle)) * MoveCount; end; if isLeft in Form1.Input.States then Angle := Angle - 1; if isRight in Form1.Input.States then Angle := Angle + 1; end; Am besten ihr schauts euch mal an. ![]() ![]() |
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Mhh.
degtorad wandelt die Gradzahl in Rad-Angabe um. diese musst du dann der Funktion (cos/sin) übergeben. Also:
Delphi-Quellcode:
und nicht anders herum :coder:
cos(degtorad(Angle))
|
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Hi,
thx, bin grad inner Schule, werde es später mal probieren ;). *MFG* Manu :hi: |
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Hi,
also, irgendwie wills immernoch nicht :( . So sieht er jetzt aus:
Delphi-Quellcode:
Ich glaube es liegt an meinem Image. Werde ich mal ausprobieren.
procedure TAuto.DoMove(MoveCount: Integer);
begin inherited DoMove(MoveCount); if isUp in Form1.Input.States then begin X := X + cos(degtorad(Angle)) * MoveCount; Y := Y + sin(degtorad(Angle)) * MoveCount; end; if isDown in Form1.Input.States then begin X := X - cos(degtorad(Angle)) * MoveCount; Y := Y - sin(degtorad(Angle)) * MoveCount; end; if isLeft in Form1.Input.States then Angle := Angle - 1; if isRight in Form1.Input.States then Angle := Angle + 1; end; Hier könnt ihr euch mal meinen Source anschauen, ich hoffe ihr versteht das besser: ![]() ![]() [edit] Ups, da ist noch ein Fehler im Quellcode, nehmt grad den, den ich hier gepostet hab. Beim anderen steht noch ein - statt ein +. (Kommt vom rumprobieren). Der Fehler aber bleibt. [/edit] |
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Delphi-Quellcode:
procedure TAuto.DoMove(MoveCount: Integer);
begin inherited DoMove(MoveCount); if isUp in Form1.Input.States then begin X := X - cos(degtorad(Angle)) * MoveCount; Y := Y + sin(degtorad(Angle)) * MoveCount; end; if isDown in Form1.Input.States then begin X := X + cos(degtorad(Angle)) * MoveCount; Y := Y - sin(degtorad(Angle)) * MoveCount; end; if isLeft in Form1.Input.States then Angle := Angle - 1; if isRight in Form1.Input.States then Angle := Angle + 1; end; So sollte es eigentlich funktionieren! //Edit: Da anscheinend die Farbcodes im Quelltext nicht funktionier hab ich sie wieder rausgelöscht |
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Hi,
geht leider auch nicht :( *MFG* Manu :hi: |
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Ja und was geht da nun nicht ?
Bewegt sich nichts ? Falsche Richtung ? Fehlermeldung ? |
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Hi Ben,
ich hatte doch die Sourcen angehängt. Ich dachte man könnte es selbst mal testen ;). Trotzdem hier nochmal: Das Auto fährt einfach in irgendeine Richtung. |
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
*push* :angle2:
|
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
so vielleicht?
Delphi-Quellcode:
rot = Rotation
x := x + cos(rot / 180 * pi) * geschwindigkeit;
y := y + sin(rot / 180 * pi) * geschwindigkeit; geschw. = einfach ein wert für die geschwindigkeit... |
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Hi Flo,
das geht leider auch nicht :( Das Auto fährt immernoch nicht richtig :( |
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Kann mir nur vorstellen das die falsch cos und sin funktion genutzt wird. Versuche mal system.cos und system.sin
|
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Hi Christian,
das geht leider auch nicht :cry: Aber ich hab die Lösung grade eben gefunden :!: . Das war ja sowas von einfach :oops: :
Delphi-Quellcode:
X := X + cos256(Angle) * MoveCount;
Y := Y + sin256(Angle) * MoveCount; |
Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
Ist doch logisch, du musst die Richtung zur aktuellen Position addieren.
Kleines Beispiel:
Delphi-Quellcode:
DX/DY ist die Richtung ("Direction").
DX := Cos(Random(360) * Pi / 180) * Speed;
DY := Sin(Random(360) * Pi / 180) * Speed; [...] X := X + DX; Y := Y + DY; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:33 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