Registriert: Di Aug 31, 2010 10:29 Beiträge: 12 Wohnort: Norwegen
Programmiersprache: Pascal
In meinem Programm gibt es eine Methode TForm1.Animate. Das Wesentlichste ist darin Volgendes:
for i:=1 to 500 do begin add(1.0,ObsPoint, sign*ds*0.1,yhat, ObsPoint); add(1.0,Target, sign*ds*0.1,yhat, Target); if StopSignal then break; // wirkt nicht RenderScene(Target) end {for i};
Also, der Kamera bevegt sich in 500 Stufen. Ich möchte jetzt durch einem Druck auf dem Esc diese Animation unterbrechen. Oben ist das illustriert durch ein "StopSignal" der irgendwelsches wahr wirt und den for-Satz abbricht.
Meine Frage ist deshalb: wie kann man den obigen for-Satz durch ein "StopSignal" unterbrechen?
In den TForm1.FormKeyPress habe ich StopSignal zu sahr gesetzt als Reaktion zu einem Escapedruck --- Misslungen!
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Das Problem ist, dass die Form-Events (wie KeyPress) nicht aufgerufen werden, während deine Animation läuft. Das kannst du ändern, indem du Application.ProcessMessages in die For-Schleife einfügst.
Generell ist das was du tust aber keine gute Praxis. Es ist üblicherweise besser, so Animationen in Timerobjekten (entweder die Delphi-TTimer aus der Komponentenbibliothek, oder selbst gebaute im OnIdle) umzusetzen. Das erlaubt es einem, die Animationsschrittweite von der Geschwindigkeit des Rechners abhängig zu machen, sodass die Animation auf allen Systemen gleich schnell läuft (Stichwort: Time Based Movement).
grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Di Aug 31, 2010 10:29 Beiträge: 12 Wohnort: Norwegen
Programmiersprache: Pascal
Der Processmessages wirkt gut.
Es wurde auch unterstrichen dass man mit der Timer es so machen kann, dass "die Animation auf allen Systemen gleich schnell läuft". Im Buch von Jacobs habe ich die Methode gefunden und es wird bald im Programm zugefügt.
Mitglieder in diesem Forum: 0 Mitglieder und 15 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.