AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Animationen mit Delphi erstellen

Ein Thema von DerHaushaltsProfi · begonnen am 18. Jan 2015 · letzter Beitrag vom 24. Jan 2015
Antwort Antwort
Seite 2 von 3     12 3      
Jens01

Registriert seit: 14. Apr 2009
673 Beiträge
 
#11

AW: Animationen mit Delphi erstellen

  Alt 18. Jan 2015, 14:41
Hier!
Guck mal, was Mathmatiker gemacht hat. Den kannst Du auch fragen. Der ist nämlich Lehrer!
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
pelzig
(Gast)

n/a Beiträge
 
#12

AW: Animationen mit Delphi erstellen

  Alt 18. Jan 2015, 14:45
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
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
673 Beiträge
 
#13

AW: Animationen mit Delphi erstellen

  Alt 18. Jan 2015, 14:54
Zitat:
Für gewisse Aufgaben ist es aber völlige Zeitverschwendung, diese Aufgaben mit Delphi nachprogrammieren zu wollen!
Wenn man physikalische Probleme mathematisch korrekt abbilden will, kann eine Programmierung schon sinnvoll sein.
Achtung: Bin kein Informatiker sondern komme vom Bau.

Geändert von Jens01 (18. Jan 2015 um 14:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

AW: Animationen mit Delphi erstellen

  Alt 18. Jan 2015, 15:14
Ok cool danke und funktioniert das dann auch flüssig halt wie eine richtige animation oder ruckelt das rum?
Genau da liegt nämlich der Hase im Pfeffer. Wenn du das so ruckelfrei wie nur möglich hinbekommen möchtest, dann wirst du nicht darum herumkommen, die Bilder alle im Speicher vorzuhalten.

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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
pelzig
(Gast)

n/a Beiträge
 
#15

AW: Animationen mit Delphi erstellen

  Alt 18. Jan 2015, 15:40
Den "Hasen im Pfeffer" erkenne ich vielleicht.

Womit hast Du denn den "Hasen im Pfeffer" identifiziert oder abgeknallt/erlegt?

MfG
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: Animationen mit Delphi erstellen

  Alt 18. Jan 2015, 16:40
Den "Hasen im Pfeffer" erkenne ich vielleicht.

Womit hast Du denn den "Hasen im Pfeffer" identifiziert oder abgeknallt/erlegt?

MfG
Häh? Wer? Was?

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?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#17

AW: Animationen mit Delphi erstellen

  Alt 18. Jan 2015, 18:39
Genau da liegt nämlich der Hase im Pfeffer. Wenn du das so ruckelfrei wie nur möglich hinbekommen möchtest, dann wirst du nicht darum herumkommen, die Bilder alle im Speicher vorzuhalten.
Ach, ich würd mal die Kirche im Dorf lassen. Es geht vermutlich eher um einfache 2D-Animationen. Meine Physiklehrerin in der Schule hat übrigens damals auch gerne mal für bestimmte Dinge solche kleinen Simulationsprogramme mit Delphi geschrieben. TCanvas hat locker ausgereicht.

@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:
// Animationsschleife
while True do
begin
  Objekt.X := Objekt.X + 5;

  Objekt zeichnen;

  // 10ms Pause zwischen Frames = 100 FPS
  Sleep(16);
end;
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.

2. Zeitabhängig
Besser ist es, direkt die Position des Objekts in Abhängigkeit von der Zeit zu berechnen:
Delphi-Quellcode:
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;
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.

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:
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;
Hier noch ein Link dazu.

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.

Geändert von Namenloser (18. Jan 2015 um 18:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#18

AW: Animationen mit Delphi erstellen

  Alt 18. Jan 2015, 19:31
Es ist ja schon so lange her, da wiederhole ich doch mal die Aussage vom TE
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#19

AW: Animationen mit Delphi erstellen

  Alt 18. Jan 2015, 19:45
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
TAnimator.AnimateInt( MyButton, 'Left', 100, 0.2 {Sekunden} ); Dieser TAnimator hat dann einen Timer und geht dann in jedem Timer-Intervall alle Controls durch, die es aktuell zu animieren gibt.

Wenn man sich das anschauen möchte, wie das aussehen kann, dann hier schauen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#20

AW: Animationen mit Delphi erstellen

  Alt 18. Jan 2015, 21:32
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:
Es ist ja schon so lange her, da wiederhole ich doch mal die Aussage vom TE
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.
Die gleichen Prinzipien kann man natürlich auch zum Abspielen von vorgefertigten Animationen verwenden. Dann berechnet man halt aus der Zeit den Bildindex statt der X-Koordinate eines Objekts. So viel Transferleistung sollte möglich sein.

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.

Geändert von Namenloser (18. Jan 2015 um 22:09 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:16 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