AW: Animationen mit Delphi erstellen
Hier!
Guck mal, was Mathmatiker gemacht hat. Den kannst Du auch fragen. Der ist nämlich Lehrer:shock:! |
AW: Animationen mit Delphi erstellen
Mit fast jeder Programmiersprache ist es möglich, die gestellte Aufgabe zu erfülllen.
Mann, mann, mann! Für gewisse Aufgaben ist es aber völlige Zeitverschwendung, diese Aufgaben mit Delphi nachprogrammieren zu wollen! Man formuliere doch das Problem etwas konkreter, formuliere etwas um (notfalls auf ENGLISCH) und Google liefert ein paar Treffer... Sind Google- und Bing-Suchen denn in der Aufgabenstellung explizit verboten worden? Hausaufgaben werden hier nicht übernommen. Man könnte daraus eventuell sogar folgern: Fachaufgaben werden hier nicht übernommen. MfG |
AW: Animationen mit Delphi erstellen
Zitat:
|
AW: Animationen mit Delphi erstellen
Zitat:
Wenn das aufgrund der Größe der Bilder aber nicht darstellbar ist (der Speicher läuft voll), dann musst du dir eine passende Strategie ausdenken, wie du die Bilder immer Just-In-Time (bzw. ein wenig früher) in den Speicher holst. Das macht man dann mit Threads, die dieses Laden und entsorgen dann im Hintergrund erledigen. |
AW: Animationen mit Delphi erstellen
Den "Hasen im Pfeffer" erkenne ich vielleicht.
Womit hast Du denn den "Hasen im Pfeffer" identifiziert oder abgeknallt/erlegt? MfG |
AW: Animationen mit Delphi erstellen
Zitat:
Die Problematik die auftreten kann habe ich doch beschrieben, oder weisst du da mehr als wir, wie groß und wieviele Bilder da pro Animation gezeigt werden sollen? |
AW: Animationen mit Delphi erstellen
Zitat:
@DerHaushaltsProfi Lest euch mal die Dokumentation und die Beispiele zu TCanvas bzw. TPaintBox. Wenn ihr ein Bild zeichnen könnt, könnt ihr auch eine Animation zeichnen. Dazu müsst ihr nur in regelmäßigen Abständen immer wieder ein neues Bild über das alte zeichnen. Damit das ganze flüssig läuft, noch ein paar Tips. Es gibt nämlich verschiedene Möglichkeiten, wie man die Simulation/Animation umsetzen kann. 1. Feste Schritte Das ist vielleicht der naheliegenste Ansatz. Wenn man z.B. ein Objekt mit konstanter Geschwindigkeit von links nach rechts über den Bildschirm wandern lassen will, könnte man das naiv so bewerkstelligen (Pseudocode):
Delphi-Quellcode:
Nachteil ist, dass durch verschiedene Faktoren wie Prozess-Scheduling und Rechnergeschwindigkeit die tatsächliche Zeit zwischen zwei Frames schwanken kann, was sich dann in Rucklern oder ungewolltem Zeitlupentempo bemerkbar macht.
// Animationsschleife
while True do begin Objekt.X := Objekt.X + 5; Objekt zeichnen; // 10ms Pause zwischen Frames = 100 FPS Sleep(16); end; 2. Zeitabhängig Besser ist es, direkt die Position des Objekts in Abhängigkeit von der Zeit zu berechnen:
Delphi-Quellcode:
Das ist für einfache Bewegungen wie Bewegungen mit konstanter Geschwindigkeit oder konstanter Beschleunigung eigentlich die optimale Lösung. Der Nachteil ist, dass man oft vorher mit Stift und Papier erst mal einige Umformungen machen muss, um auf die richtige Formel zu kommen.
var t0, t: integer;
t0 := GetCurrentTimestamp; while True do begin t := GetCurrentTimestamp; // Geschwindigkeit des Objekts = 500 Pixel in 1000 ms Objekt.X := 500 * (t-t0)/1000; Objekt zeichnen; Sleep(10); end; 3. Zeitabhängige Zwischenschritte Bei komplexeren Simulationen wird dieser Ansatz deswegen leider schnell sehr schwierig bis unmöglich. In dem Fall kann man aber immer noch bei den Bewegung zwischen den Frames die verstrichene Zeit berücksichtigen:
Delphi-Quellcode:
Hier noch ein Link dazu.
var t0, t: integer;
t0 := GetCurrentTimestamp; while True do begin t := GetCurrentTimestamp; // 500 * (t-t0)/1000 = Wie weit müsste sich das Objekt mit seiner aktuellen Geschwindigkeit seit dem letzten Frame bewegt haben? Objekt.X := Objekt.X + 500 * (t-t0)/1000; Objekt zeichnen; Sleep(10); // Alte Zeit merken t0 := t; end; Auch dieser Ansatz hat aber einen Nachteil, nämlich dass die Simulation u.U. nicht mehr deterministisch ist. D.h. durch die bereits erwähnten, kleinen Zeitschwankungen zwischen Frames, läuft die Simulation immer ein kleines bisschen anders ab (wirkt dafür aber flüssig), und hat u.U. auch ein etwas anderes Ergebnis. Im Extremfall könnte es z.B. in einem Computerspiel passieren, dass du auf einem schnellen Rechner von einer Kugel getroffen wirst, aber auf einem langsameren Rechner mit niedrigerer FPS-Zahl die gleiche Kugel einfach berührungslos durch dich durchfliegt, weil die Simulationsabstände zu groß sind. Das sollte für euch aber unerheblich sein (und das zu lösen ist ein ziemlich schwieriges Problem). Ich würde euch also wenn möglich zum 2. Ansatz raten (sollte bei euren Wellen vermutlich gehen), und falls das nicht geht zum 3. Ich hoffe, das war einigermaßen verständlich und ich habe euch nicht mit zu viel Information erschlagen. |
AW: Animationen mit Delphi erstellen
Es ist ja schon so lange her, da wiederhole ich doch mal die Aussage vom TE :roll:
Zitat:
|
AW: Animationen mit Delphi erstellen
Zu dem Animieren von Controls das macht man mit 0,00% Sleep. Denn wozu sollen die gut sein? Den GUI-Thread blockieren? Man hat ja eher das Problem, dass der GUI-Thread eh schon zu langsam ist um alles mögliche zu animieren, aber da bremst man ein wenig und dann wird es schneller?
Um etwas zu animieren baut man sich einen Animator, wo man dann das Control, die Eigenschaft, den Zielwert und die Dauer der Animation angibt
Delphi-Quellcode:
Dieser
TAnimator.AnimateInt( MyButton, 'Left', 100, 0.2 {Sekunden} );
Delphi-Quellcode:
hat dann einen Timer und geht dann in jedem Timer-Intervall alle Controls durch, die es aktuell zu animieren gibt.
TAnimator
Wenn man sich das anschauen möchte, wie das aussehen kann, dann hier schauen |
AW: Animationen mit Delphi erstellen
Würde ich in echt auch nicht so machen, aber es ist Pseudocode und ich wollte es nicht unnötig verkomplizieren. Außerdem ist TTimer auch nicht optimal, wenn man wirklich flüssige Animation haben will, weil die zeitliche Auflösung nicht genau genug ist. In der Schleife kann man wenigstens das Sleep auskommentieren und bekommt dann zumindest eine flüssige Bewegung, wenn es keine Rolle spielt, dass die CPU dann voll ausgelastet wird. Aber gerade bei Simulationen kann letzteres auch gewollt sein, da mehr Zwischenschritte = höhere Genauigkeit.
Achja, und dazu: Zitat:
Ich bin mir aber nicht sicher, ob das Abspielen einer vorgerenderten Animation wirklich das ist, was sie wollen, oder ob es nur die erste Idee war mangels besseren Wissens. Mit Gimp eine „flüssige“ Animation zu erstellen, wird schon deshalb schwierig, weil man sehr viele Einzelbilder braucht. Gerade so etwas wie Wellen kann man doch per Code viel besser zeichnen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:36 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