![]() |
Andorra 2D Figur von A nach B bewegen
Hi,
ich arbeite seit kurzem etwas mit Andorra 2d und hab schon die ersten tutorials dafür durchgearbeitet. Das tutorial mit der Sprite Engine mit dem Bild mit dem jungen der durch das Bild läuft habe ich gerade fertiggestellt. Jetzt kommt mir die Frage auf , wie ich das schaffe, dass Die Figur sich von A nach B bewegen kann. Bis jetzt läuft die ja nur waagerechet, also es wird nur X verändert und bekommt am Ende des Bildschirmrandes eine neue Y Position. Jetzt soll sie aber z.B. zur Koordinate(x|y) laufen und dort stehenbleiben. Daraufhin sich dann erst bei einer neuen Anweisung bewegen. Jemand eine Idee? Link zum tutorial: ![]() Bitte um Antworten mfg |
Re: Andorra 2D Figur von A nach B bewegen
Die Logik, die hinter der X-Position steht, musst Du jetzt noch auf die Y-Position übertragen.
Entweder Du läufst immer ein Stück auf der X-Achse, danach auf der Y-Achse, würde halt stottern. Um das Stottern wegzubekommen, brauchst Du etwas Mathematik und den lieben Pythagoras. |
Re: Andorra 2D Figur von A nach B bewegen
ok ist schon etwas ;-)
Also habe schon mal ausprobiert das beides zu verbinden aber dann läuft er nur schräg weg, also nicht der gewünschte Effekt :D Wie soll das mit Phytagoras funktionieren, kannst du mir das nochmal etwas nähern erklären? Nochmal etwas genauer was ich will: Also stellt euch einfach ein Fläche vor die eben ist und ohne Hindernisse, auf der sagen wir ein paar Punkte A,B,C,D... eingezeichnet sind. Die Figur an Punkt A soll dann gerade zu Punkt B laufen...danach zu Punkt C usw... Die Bewegungen sind geradlinieg und nicht schräg. Edit: Noch eine etwas andere Fragen, gibt es noch mehrere Seiten auf denen ich mich mehr übre Andorra 2D informieren kann, z.B. Tutorials, ein Forum usw. |
Re: Andorra 2D Figur von A nach B bewegen
Dann würde ich sowas vorschlagen:
Delphi-Quellcode:
Das Addieren und multiplizieren von TPoint geht so nicht, aber du weist was ich meine :stupid:
// Pos läuft von 0 bis n (n=Anzahl der Punkte)
// Points enthält alle Punkte die auf dem weg liegen sollen function GetPos(pos: Single; Points: Array of TPoint):TPoint; var a, b: Integer; x: Single; begin a := Trunc(pos); b := Min(Ceil(pos), high(Points)) x := frac(pos); Result := Points[a] * (1-x) + Points[b] * x; end; Das läuft aber umso schneller, je weiter die Punkte entfernt sind ... |
Re: Andorra 2D Figur von A nach B bewegen
Wie funktioniert genau, was bewirkt genau, deine function?
berechnet es die Positionen zwischen den Punkten oder was? Hab ich noch nicht ganz verstanden was diese bezwecken soll. Hier die jetzige procedure die für das bewegen zuständig ist:
Delphi-Quellcode:
Dies ist nur auf das x bezogen.
procedure TFigur.DoMove(TimeGap: double);
begin inherited; X := X + XSpeed*TimeGap; if ((X > Engine.SurfaceRect.Right) and (XSpeed > 0)) or ((X < -96) and (XSpeed < 0)) then begin SetLine; end; end; Für x könnte man ja theoretisch auch Y nehmen. Sagen wir mal die Figur ist auf Pos(100|100) und soll sich zu Pos(Pos.x|Pos.Y) bewegen. Das die Figur bewegt klappt ja theoretisch schon nur die Richtung und das Ziel, wo sie stehen bleibt bzw. hingehen soll fehlt. |
Re: Andorra 2D Figur von A nach B bewegen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab mal versucht, das mit dem Pythagoras verständlich zu machen, siehe Anhang. Ich nehme an, daran scheitert es? Oder liegt es daran, eine if-Abfrage zu machen, ob das Ziel überschritten wurde? Evtl. noch mit Verfeinerung, dass nach den Schritt-Berechnungen kontrolliert wird, ob der Schritt nicht zu groß ist, und so entsprechend verkleinert wird.
Das Prinzip ist 1:1 für einen Timer übertragbar, wenn du dagegen eine Dauerschleife benutzt (wonach dein Code aussieht), musst du noch ein wenig anpassen, sollte aber mit einer einfachen Multiplikation / Division gut machbar sein (indem du zum Beispiel / 100 * TimeGap teilst, 100 ggf. anpassen). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 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