Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Mai 14, 2024 18:08

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Dez 13, 2013 10:56 
Offline
DGL Member

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!

Ch


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Dez 13, 2013 11:16 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Dez 13, 2013 18:12 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
So sieht eine einfache Anwendung von Application.ProcessMessages; aus.
Erst wen Button1 gedrückt wird, wird die Schleife unterbrochen.
Code:
  1. var
  2.   Stop: boolean;
  3.  
  4. procedure TForm1.Button1Click(Sender: TObject);
  5. begin
  6.   Stop := True;
  7. end;
  8.  
  9. procedure TForm1.Button2Click(Sender: TObject);
  10. begin
  11.   Stop := False;
  12.   repeat
  13.     Canvas.Pen.Color := Random($FFFFFF);
  14.     Canvas.LineTo(Random(ClientWidth), Random(ClientHeight));
  15.     Application.ProcessMessages;
  16.     if Stop then Exit;
  17.   until 1 = 2;
  18. end;      

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Dez 28, 2013 16:43 
Offline
DGL Member

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.

Vielen Dank!


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Dez 28, 2013 22:15 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
dass man mit der Timer es so machen kann, dass "die Animation auf allen Systemen gleich schnell läuft".

Voraussetzung der PC ist schnell genug, sonst sieht es wie bei gewissen Games aus, es gibt Ruckler.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 17 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.038s | 17 Queries | GZIP : On ]