![]() |
Rotation
Hi,
wie ich unter den Tipps auf dieser Seite erfahren habe, kann man TImageSprites um ihre eigene Achse drehen lassen. Dies soll mit der Funktion: X :=X + Cos256(Angle); die man unter die DoMove Methode einfügen soll, funktionieren. Leider bekomme ich hierbei eine Fehlermeldung, er kenne die Variable Angle nicht. Wenn ich diese deklariere und das Programm starte, dreht das TImageSprite sich nicht. Was habe ich falsch gemacht :?: :?: :?: :?: |
Tach basti,
du musst TimagespriteEX benutzen (nicht timagesprite). Den Sprite drehst Du dann mit [sprite].angle:=winkel; arnoldo |
Danke, das funktioniert so. :D
Allerdings entsteht dadurch ein neues Problem. Wenn das rotierende Bild wieder auf seiner Ursprungsposition ist (nach 256 Versetzungen), entstehen im Bild einige seltsame Linien, die da eigentlich nichts zu suchen haben. Weißt du, woran das liegen könnte :?: |
Also sowas konnte ich noch nicht beobachten.
Du kannst ja wenn der Winkel 256 erreicht ist, diesen wieder auf 0 setzen. vielleicht hilfts. |
Das muss am Bild liegen. Ich erstell einfach ein neues. Aber ich habe ein weiteres Problem.
Diese Rotation brauch ich für ein Raumschiffspiel. Man soll mit dem Raumschiff Loopings fliegen können, wobei der Schuss immer von der gleichen Position des Raumschiffs abgefeuert werden soll. Wenn ich das Raumschiff nicht rotieren lasse, wäre das diese Position: Laser.X := Raumschiff.X + Raumschiff.Width; Laser.Y := Raumschiff.Y + (Raumschiff.Height div 2); Wie kann ich diese Position auch nach der Rotation ermitteln (z.B bei Angle = 126)??? Gruß Basti :dancer2: |
Also eigentlich soll sich deine Kanone ja auf einem Kreis bewegen richtig?
Du wirst dann noch ein Problem haben, du willst ja nicht nur die Position der Kanone auf dem Kreis haben, sondern du willst auch die Richtung haben, in die geschosse werden soll. Ich denke am besten sind dafür Vektoren. Aber frag mich nicht wie man einen Vektor um einen Grad dreht. Aber wenn du danach suchst, wirst du bestimmt erfolgreich sein. Anfangsvektor=Kanonenposition-RaumschiffMittelpunkt Deine Kanonenposition hattest du ja schon bestimmt und den RaumschiffMittelpunkt (oder SpriteMittelpunkt) sollte auch kein Problem sein. so jetzt gibts vielleicht ne Formel wie NeuerVektor=Anfangsvektor*Sin(Winkel) (ist natürlich Quatsch, ich kenn die Formel nicht) aber vielleicht hilfts ja weiter. Mit dem neuen Vektor hast du halt gleich die Schussrichtung. Minz |
Ich denke, dass zweite Problem, von dem du meinst dass ich es haben werde, habe ich bereits gelöst. Der Schuss des Raumschiffs fliegt in die gleiche Richtung, in die das Raumschiff fliegt.
Da habe ich einfach die selbe Flugprocedure benutzt: X := X + cos256(Angle)*Flightspeed; Y := Y + sin256(Angle)*Flightspeed; Angle vom Schuss ist in diesem Fall der gleiche Winkel wie der vom Raumschiff. Mein Problem bleibt weiterhin der Startpunkt, und was genau meinst du mit den Vectoren? :freak: |
Vektoren sind ein mathematisches Konstrukt und werden
als Pfeile dargestellt. in einem solchen Pfeil stecken zwei Informationen: 1. Richtung 2. Länge Bei einem zweidimensionalen Vektor hat der Vektor 2 Werte, z.B. x,y x=2 y=2 Die Länge des Pfeils könnte z.B. für die Geschwindigkeit stehen. Sie wird einfach mit Pythagoras berechnet. Länge=wurzel(x*x+y*y) Wenn du dir in einem Koordinatenkreuz nun einen beliebigen Punkt wählst und dann 2 in x-richtung und 2 in y-richtung gehst und die Strecke durch einen Pfeil kennzeichnest, ist dein Vektor fertig. wenn du diesen Vektor(2,2) nun um 1 Grad drehen könntest, und einen neuen Vektor aus der Formel bekämst, hättest du damit automatisch die neue Position der Kanone. |
Ich muss also eine Gerade berechnen, die vom Mittelpunkt des Raumschiffs ausgeht und den Punkt schneidet, von dem der Schuss abgefeuert wird?
|
so ungefähr,
eigentlich endet die Gerade direkt in dem Punkt, in dem der Schuss abgefeuert wird. Nur mit der Gerade selber kannst du ja nix anfangen. Aber wenn du Vektoren als Gerade bezeichnest schon eher :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 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