Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi objekt um 360° drehen (https://www.delphipraxis.net/33728-objekt-um-360%B0-drehen.html)

Gentleman 11. Nov 2004 17:32


objekt um 360° drehen
 
hi leute!

ich möchte ein objekt bewegen. wenn man für jede pfeitaste eine richting bestimmt kann man das objekt ja nur in 4 richtungen bewegen. ich hab mir schon so einiges ausgedacht allerdings lief nichts davon 100 prozentig.
habt ihr ideen, wie man objekte in mehr als 4 richtungen bewegen kann?

thx im voraus!

Nikolas 11. Nov 2004 17:39

Re: objekt um 360° drehen
 
Was hat der Titel mit der Frage zu tun?
Zum verschieben: Mekr dir die Position des Körpers und die Mausposition und verschieb dann deinen Körper auf dieser Geraden Richtung Maus.

Ben1 11. Nov 2004 18:25

Re: objekt um 360° drehen
 
Ich habe dazu immer 2 Methoden verwendet.
1. Mit den Pfeiltasten gebe ich nicht die absolute Richtung vor, sondern wenn ich links drücke dreht sich das Objekt gegen den Uhrzeigersinn und bei Rechts im Uhrzeigersinn. Hoch und runter standen für vorwärts und Rückwärtes.
2. Mit der Maus. Eine einfache Vektorgleichung ermittelt ob sich die Maus rechts oder links von der Blichrichtung des Objektes befindet. Je nachdem dreht sich das Objekt dann Stück für Stück nach rechts oder links.

Bei mir konnte man kleine Wagen oder Flugzeuge steuern, für die Flugzeuge nahm ich die Methode mit der Maus und für die Fahrzeuge die mit der Tastatur. Je nachdem was besser paßte.

Und wenn du die volle Bewegungsfreiheit gar nicht brauchst dann nimm doch den Ziffernblock, damit kannst du sehr leicht 8 Richtungen fest vorgeben.

Gentleman 11. Nov 2004 19:20

Re: objekt um 360° drehen
 
das mit der maus is eine gute idee :thumb: , allerdings ist mir nicht ganz klar wie ich das in code umsetzen soll. :oops:
könntet ihr mir da villeicht auch noch etwas auf die sprünge helfen?

Ben1 12. Nov 2004 07:21

Re: objekt um 360° drehen
 
Ich habe dazu eine Funktion geschreiben die den Abstand eines Punktes(P) von einer Geraden(durch die Punkte V1 und V2) berechnet


Code:
function abstandgerade(P,V1,V2:Tspoint):single;
var richt,orto:Tspoint;
    a:single;
begin
richt.x:=V1.x-V2.x;
richt.y:=V1.y-V2.y;
a:=sqrt(sqr(richt.x) + sqr(richt.y));
if a>0 then
begin
orto.x:=-richt.y/a;
orto.y:= richt.x/a;

result:= (P.x-V1.x)*orto.x + (P.y- V1.y)*orto.y;
end
else result:=0;

end;
Je nachdem ob das Ergebniss nun positiv oder negativ war wurde das Objekt nach links oder rechts gedreht.
Falls du nur den Winkel und die Position zur Verfügung hast, kannst du auch diese beiden Prozeduren zur Abstandsberechnung verwenden.

Code:
//wandelt einen Winkel in einen Vektor bestimmter länge um
function winkel_to_vector(lang:single;w:integer):Tspoint;
var rad,v,u:single;
begin
{deg in rad umrechnen}
rad:= (w)*(pi/180);

{Vektor berechnen}
v:=sin(rad)*lang;
u:=cos(rad)*lang;

result.X:=u;
result.Y:=v;

end;


function abstandgerade(P,V:Tspoint;Winkel:integer):single;
var richt,orto:Tspoint;

begin
richt:= winkel_to_vector(1,winkel);
orto.x:=-richt.y;
orto.y:=richt.x;

result:= (P.x-V.x)*orto.x + (P.y- V.y)*orto.y;

end;
Das mußt du vermutlich noch für dich anpassen, aber an sich sollte dir das erstmal weiterhelfen.


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