Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [DX] Sprite in Richtung wandern lassen, in die es guckt (https://www.delphipraxis.net/33514-%5Bdx%5D-sprite-richtung-wandern-lassen-die-es-guckt.html)

Die Muhkuh 8. Nov 2004 15:07


[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

Nonsense 8. Nov 2004 15:35

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.

Die Muhkuh 8. Nov 2004 15:40

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:

Nonsense 8. Nov 2004 15:41

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.

Die Muhkuh 8. Nov 2004 15:42

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:

Nonsense 8. Nov 2004 15:53

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:

Die Muhkuh 9. Nov 2004 17:28

Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
 
*ganz vorsichtiges push* :angle2:

Ben1 9. Nov 2004 20:55

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ß.

Die Muhkuh 10. Nov 2004 12:55

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:

jim_raynor 10. Nov 2004 12:59

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.

Die Muhkuh 10. Nov 2004 13:03

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:

Airblader 10. Nov 2004 17:31

Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
 
Zitat:

Zitat von Spider
Hi,

bin erst in der achten Klasse. Kenne mich noch nicht mit dem ganzen Zeugs (sin, cos, Deg, Rad...) aus ;).

mfg Manu :hi:

gehts mir mit 9. klasse nich anders :mrgreen:

Die Muhkuh 11. Nov 2004 17:20

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:
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;
Das drehen klappt :roll: .

Am besten ihr schauts euch mal an.

Rar
Zip

jim_raynor 11. Nov 2004 17:29

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:
cos(degtorad(Angle))
und nicht anders herum :coder:

Die Muhkuh 12. Nov 2004 08:19

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:

Die Muhkuh 12. Nov 2004 14:04

Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
 
Hi,


also, irgendwie wills immernoch nicht :( .

So sieht er jetzt aus:

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;
Ich glaube es liegt an meinem Image. Werde ich mal ausprobieren.

Hier könnt ihr euch mal meinen Source anschauen, ich hoffe ihr versteht das besser:

Rar
Zip


[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]

Maximus 12. Nov 2004 14:25

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

Die Muhkuh 12. Nov 2004 14:32

Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
 
Hi,

geht leider auch nicht :(

*MFG*

Manu :hi:

Ben1 12. Nov 2004 14:36

Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
 
Ja und was geht da nun nicht ?
Bewegt sich nichts ? Falsche Richtung ? Fehlermeldung ?

Die Muhkuh 12. Nov 2004 14:47

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.

Die Muhkuh 13. Nov 2004 20:29

Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
 
*push* :angle2:

Florian H 18. Nov 2004 15:52

Re: [DX] Sprite in Richtung wandern lassen, in die es guckt
 
so vielleicht?

Delphi-Quellcode:
  x := x + cos(rot / 180 * pi) * geschwindigkeit;
  y := y + sin(rot / 180 * pi) * geschwindigkeit;
rot = Rotation
geschw. = einfach ein wert für die geschwindigkeit...

Die Muhkuh 18. Nov 2004 16:20

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 :(

jim_raynor 18. Nov 2004 16:48

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

Die Muhkuh 28. Nov 2004 09:16

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;

Nonsense 29. Nov 2004 10:39

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 := Cos(Random(360) * Pi / 180) * Speed;
    DY := Sin(Random(360) * Pi / 180) * Speed;

    [...]

    X := X + DX;
    Y := Y + DY;
DX/DY ist die Richtung ("Direction").


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz