![]() |
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! |
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. |
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. |
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? |
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:
Je nachdem ob das Ergebniss nun positiv oder negativ war wurde das Objekt nach links oder rechts gedreht.
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; Falls du nur den Winkel und die Position zur Verfügung hast, kannst du auch diese beiden Prozeduren zur Abstandsberechnung verwenden.
Code:
Das mußt du vermutlich noch für dich anpassen, aber an sich sollte dir das erstmal weiterhelfen.
//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; |
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