![]() |
Animationen mit Delphi erstellen
Hallöchen liebe Community,
dies ist mein Erster Post im Forum und ich möchte gleich mal einige Fragen in den Raum schmeißen :P. Für unsere Facharbeit im Bereich Informatik haben ein Kumpel und ich uns folgendes Thema überlegt: Programmieren eines physikalischen Lernprogrammes unter Verwendung von theoretischem Wissen und Animationen. Soweit so gut. Nun sind wir am überlegen wie wir Animationen in Delphi erstellen können, da wir in Informatik im Gebiet Grafik noch nicht so weit sind :cry:, also bitte kein Hate :D. Wir sind auf die Idee gekommen (Animation z.B. für Ausbreitungsrichtung von mechanischen Wellen), einzelne Bilder mit Gimp oder Paint zu erstellen und dann mit Timern diese Einzelbilder schnell durchlaufen zu lassen, sodass eine Art kleiner Film bzw. Animation entsteht die flüssig läuft. Nun ist meine Frage, inwieweit dies so umsetzbar ist oder ob ihr mir vlt. andere Möglichkeiten für das Erstellen von Animationen mittels Delphi nennen könntet. Danke schonmal im Vorraus Mfg DerHaushaltsProfi:thumb: |
AW: Animationen mit Delphi erstellen
Ganz ehrlich?
Erstelle dir ein paar AVI Filmchen und lasse diese dann anzeigen. Dafür gibt es eine Komponente die das Anzeigen übernimmt. Dann brauchst du dich nur noch darum zu kümmern, das richtige Filmchen der Komponente zuzuweisen (und natürlich um die Logik des Lernprogramms). Als Programmierer muss man nicht alles programmieren, sondern sich zuerst den Einsatz der richtigen Mittel und die Abläufe festlegen. Das heisst viel Papier und Hirnschmalz. Erst dann wird die Entwicklung gestartet. |
AW: Animationen mit Delphi erstellen
Danke erstmal für die Antwort. Nur Leider weiß ich nicht genau inwiefern das unser Lehrer erlaubt. Also denkst du, dass es zu schwierig / aufwendig ist das "nur" mit Delphi zu machen (also wie oben beschrieben mit Bildern und Timern, wie ein Daumenkino :D)?
Mfg |
AW: Animationen mit Delphi erstellen
Was wollt ihr denn wirklich erstellen?
Eine Lernprogramm oder eine Bilder-Animation? Erstellt doch erst mal das Lernprogramm, denn das ist doch das Wichtigste. Wenn das fertig ist und noch Zeit bleibt, dann baut euch noch einen Bilder-Animator und baut den ein bzw. tauscht das eben aus, oder lasst es beides drin, dann könnt ihr sowohl Avi-Filmchen oder eben Bilder-Sequenzen darstellen. Das hat dann auch noch einen wirklichen Mehrwert. Ob der Lehrer das erlaubt? Ja, das ist ja schwierig ... wenn der nicht taubstumm ist, dann würde ich den einfach fragen und mir die Antwort anhören :stupid: |
AW: Animationen mit Delphi erstellen
Je nachdem was dir erlaubt und welche Interaktionen mit der Animation möglich sein sollte gibt es mehrer Möglichkeiten
a, Vorbereitete Animationen die als Videofilmchen (AVI, MPEG, ...) gespeichert sind abspielen b, In anderen Systemen vorbereitete 3D-Modelle mit Animationen welche über einen passenden Player (VRML, XVL, JT, 3DS, ...) abgespielt werden können und diverse Einflussnahme (Geschwindigkeit/Ein-Ausblenden von parametern, Kleine Anpassungen an der Animation, ...) c, Erstellung von Animationen auf Basis von FMX (Plassformunabhängiges Gegenstück zur VCL). Einfachm mal nach "Delphi fmx animation" im WWW suchen. d, Einfach Animation auf Basis von Einzelbildern (Stichwort Animated GIF) |
AW: Animationen mit Delphi erstellen
Eine sehr schöne Aufgabe, mit ein paar Informationsdefiziten.
"Programmieren eines physikalischen Lernprogrammes unter Verwendung von theoretischem Wissen und Animationen." Was ist denn ein "physikalisches Lernprogramm", speziell "unter Verwendung von theoretischem Wissen und Animationen." ? PowerPoint mit eingebundenen Links auf YouTube-Videos? Ein "physikalisches Lernprogramm" ist für mich: Amboß fällt auf Fuß. Theoretisches Wissen: Tut weh. Animationen: Monty Phython. Ich hoffe, damit vollumfänglich geholfen zu haben! MfG |
AW: Animationen mit Delphi erstellen
@ Bernhard Geyer
wir haben da halt eher an gifs gedacht also Einzelbilder die man (mit einem Timer vielleicht?) aneinander reiht. Ist das den möglich oder wäre es wirklich besser diese Animationen mit anderen Programmen zu erstellen und dann einfach mit einzubinden. @pelzig Nein so ist das natürlich nicht gemeint. Es soll KEINE PowerPoint, sondern wie schon gesagt mit Delphi programmiert werden.:wink: Wir haben uns überlegt erstmal Animationen über Ausbreitungsrichtungen/Reflektion/Brechung von mechanischen Wellen und Animationen im Bereich Magnetismus zu erstellen. Unser größtes Problem ist halt (einfach :D) diese Animations-Geschichte. @Sir Rufo das werde ich morgen mal machen. Kann mir dann irgendeiner noch sagen ob es jetzt REIN NUR MIT DELPHI (sorry4caps) möglich ist Animationen zu erstellen? Mfg |
AW: Animationen mit Delphi erstellen
Zitat:
|
AW: Animationen mit Delphi erstellen
Ok cool danke und funktioniert das dann auch flüssig halt wie eine richtige animation oder ruckelt das rum?
|
AW: Animationen mit Delphi erstellen
Zitat:
|
AW: Animationen mit Delphi erstellen
![]() 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 ![]() ![]() 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
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 ![]() |
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. |
AW: Animationen mit Delphi erstellen
Ja und die Bilder sind ja auch immer einfach so da, brauchen keine Zeit zum Laden und Speicher verbrauchen die auch nicht. Ne is klar.
Keiner von uns weiß wieviele Bilder und wie groß, und wenn zu viele und zu groß dann muss man sich auch Gedanken machen, wie man die pünktlich in den Speicher bekommt. Da nützt die Transferleistung von deinem Ansatz gar nichts. Die Auflösung des Timers reicht nicht aus? Wieviele Bilder pro Sekunde möchtest du denn anzeigen (und dann bitte auch erklären für wen)? Nach meiner Erfahrung reichen eigentlich 25 Bilder/Sekunde aus. Das macht dann 40ms pro Bild. Wie ist die Auflösung des Standard-Timers? ca. 20ms? Nach meiner Erfahrung bekommt man mit einem normalen Timer und einer recht fixen Darstellung (keine Monsterberechnungen) knapp 60 Bilder pro Sekunde auf den Schirm gemalt. Das menschliche Auge hat ab 25 Bildern/Sekunde den Eindruck einer flüssigen Bewegung. Aber evtl. hast du ja schnellere Augen? |
AW: Animationen mit Delphi erstellen
Wie bereits etliche User vollkommen richtig dargestellt haben: Es macht wenig Sinn, sich vor Entwicklung der eigentlichen Anwendung – deren Ziel es in erster Linie sein soll, physikalische Abläufe darzustellen, wobei es erst einmal um die Ermittlung von bestimmten Zahlenwwerten geht – schon Gedanken über eventuelle Animationen zu machen. Zumindest war hier noch kein Code zu sehen, der zeigt, wie z.B. Wellenausbreitung überhaupt berechnet und erst einmal in Zahlenwerten dargestellt werden soll.
![]()
Allerdings halte ich derartige Vorhaben nicht wirklich geeignet für Delphi-Anfänger. Ich beaobachte praktisch jede Woche eine derartige Anfrage von Delphi-Anfängern in den einschlägigen Foren, die danach fragen, wie man hochwertige Anwendungen wie Schaltungssimulationen oder Spiele entwickelt, wofür nicht selten mehrere erfahrene Eintwickler Monate oder gar Jahre benötigen. Ich glaube daher, wenn ihr euch bei eurem Simulationsprogramm physikalischer Effekte auf die Darstellung der Zahlen beschränkt, habt ihr schon mehr als genug zu tun, wie man z.B. ![]() ![]() ![]() ![]() ![]() |
AW: Animationen mit Delphi erstellen
Zitat:
Das Hauptproblem beim Timer ist gar nicht mal, dass das minimale Intervall zu grob ist, sondern dass er zu sehr streut. Du kriegst vielleicht im Durchschnitt 50 FPS, aber der tatsächliche Abstand zwischen zwei Frames schwankt mal zwischen 15ms und 25ms. Das hat sehr starken Einfluss darauf, ob die Animation flüssig wirkt oder nicht. Aber das sind alles Details, die für den OP wahrscheinlich erst mal überhaupt nicht wichtig sind, und deswegen bin ich darauf, ob man das jetzt konkret mit einer Schleife oder einem Timer oder sonstwie implementiert, in meinem Beitrag auch gar nicht erst eingegangen. In der Praxis reicht TTimer hier wahrscheinlich. Ist aber ein Implementierungsdetail, was für meinen Beitrag nicht relevant war. Wenn man es „wirklich richtig“ machen will, führt eigentlich sowieso kein Weg an OpenGL/DirectX vorbei. |
AW: Animationen mit Delphi erstellen
|
AW: Animationen mit Delphi erstellen
@DerHaushaltsProfi
Hier hab ich noch was feines für eure Informatik-Gruppe zur Veranschaulichung gefunden, das vielleicht eurem Projektvorhaben als Beispiel dienen kann: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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