Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler beim Winkelausrechen [erledigt] (https://www.delphipraxis.net/14936-fehler-beim-winkelausrechen-%5Berledigt%5D.html)

Pyr0cracker 18. Jan 2004 16:01


Fehler beim Winkelausrechen [erledigt]
 
Hallo!
Ich rechne für einen Zauber im Spiel den Winkel zwischen dem Spieler und der maus aus:
Delphi-Quellcode:
Richtung := arctan(wegdistanz(Maus.MausPunktX, Spieler.Position.Y, maus.MausPunktX*1000,
                              Maus.MausPunktY*1000)
                              /wegdistanz(Maus.MausPunktX, Spieler.Position.Y,
                              Spieler.Position.X, Spieler.Position.Y));

..
  position.X := Position.X + sin(Richtung);
  position.Y := Position.Y - cos(Richtung);
Allerdings fliegt der Zauber in jede richtung, nur nicht in die des mauszeigers...

Was hab ich falsch gemacht?

Gruß,

Seniman 18. Jan 2004 17:55

Re: Fehler beim Winkelausrechen
 
Hallo PyroCracker,

wenn du den Winkel zwischen Maus und Spielfigur berechnen willst empfehle ich dir die Funktion
Delphi-Quellcode:
function ArcTan2(const Y, X: Extended): Extended;
Damit bekommst du nämlich, wenn du die Entfernung in X- und Y-Richtung angibst, den tatsächlichen Winkel.
Wenn du einfach arctan benutzt, dann gibt es ein Problem: Das Programm kann nicht unterscheiden, ob der Zauber jetzt nach obenlinks oder untenrechts fliegen soll, der Tangens beider Winkel ist nämlich gleich. Deswegen ist arctan2 besser.

Ich halte eine andere Möglichkeit allerdings für noch besser:
Statt den Winkel und danach den Sinus und Kosinus des Winkels auszurechnen, berechne doch einfach gleich den Richtungsvektor des Zaubers.
Angenommen die Figur steht an den Koordinaten (x,y) und die Maus bei (mx,my) dann wären die Geschwindigkeitskomponenten vx und vy des Zaubers so:
Delphi-Quellcode:
vx:= (mx-x)/sqrt(sqr(mx-x)+sqr(my-y));
vy:= (my-y)/sqrt(sqr(mx-x)+sqr(my-y));
Das ganze geht über den Satz von Pythagoras.
Dann sparst du dir auch in jedem Frame den Sinus und Kosinus von dem Winkel auszurechen, sondern addierst einfach nur vx bzw vy.

Grüße
Seniman

Pyr0cracker 18. Jan 2004 20:40

Re: Fehler beim Winkelausrechen
 
Super! Das funktioniert.
*puh endlich*

Gruß,


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 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