Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   einfache Animation (https://www.delphipraxis.net/159251-einfache-animation.html)

Coloneo 20. Mär 2011 11:02


einfache Animation
 
Hallo,

ich bin noch ein Delphi Frischling:(. Ich will eine einfache Animation aus Bildern mittels Timern verwirklichen. Mittels einer Eingabe vom Nutzer soll die Anzahl der Animationsdurchläufe bestimmt werden.
Dazu habe ich folgenden Quelltext geschrieben:
Delphi-Quellcode:
var
  Form1: TForm1;
  ende,Ziel,i,a: integer;
  implementation

{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Visible:=false;
Image2.Visible:=false;
Image3.Visible:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
Timer1.Enabled:=true;
Timer1.Interval:=100;
Ziel:=strtoint(Edit1.Text);
for a:=0 to Ziel do begin
Ende:=Ende+1;
if Ende=Ziel then begin
Timer1.Enabled:=false;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
i: Integer;
begin
erg:=0;
i:=0;
inc(i);
case i of
1: begin
Image1.Visible := True;
Image2.Visible := False;
Image3.Visible := False;
end;
2: begin
Image1.Visible := False;
Image2.Visible := True;
Image3.Visible := False;
end;
3: begin
Image1.Visible := False;
Image2.Visible := False;
Image3.Visible := True;
i:=0;
end;
end;
end;
initialization
i := 0;
end.
Mein Problem ist das die Animation nicht wirklich anspringt: Das erste Bild wird sichtbar,und bleibt auch dauerhaft sichtbar ohne das die anderen Bildern anspringen. Irgendwas muss also falsch sein... .

alfold 20. Mär 2011 11:07

AW: einfache Animation
 
Schau mal Du startest den Timer in Buttoncklick, nach durchlauf der Forschleife beendest Du den Timer. Ich fürchte, der hat gar keine Zeit was zumachen:wink:
Und Dein Timer setzt i immer wieder auf 0
Delphi-Quellcode:
var
  Form1: TForm1;
  ende,Ziel,i,a: integer;//<--Bitte keine globalen Variablen
  implementation

{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
   Image1.Visible:=false;
   Image2.Visible:=false;
   Image3.Visible:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   i:integer;//<--Warum wenn Du i nicht benutzt
begin
   Timer1.Enabled:=true;//<--- Strart Timer
   Timer1.Interval:=100;
   Ziel:=strtoint(Edit1.Text);
   for a:=0 to Ziel do begin
   Ende:=Ende+1;
   if Ende=Ziel then
   begin
      Timer1.Enabled:=false;//---Stop Timer
   end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
   i: Integer;
begin
   erg:=0;
   i:=0;//<-- i wird bei jedem durchlauf 0
   inc(i);//ok
   case i of//<--- bleibt also immer 1
        1: begin
              Image1.Visible := True;
              Image2.Visible := False;
              Image3.Visible := False;
           end;
        2: begin
              Image1.Visible := False;
              Image2.Visible := True;
              Image3.Visible := False;
           end;
        3: begin
              Image1.Visible := False;
              Image2.Visible := False;
              Image3.Visible := True;
              i:=0;
           end;
     end;
end;

initialization
i := 0;
end.
alfold

Coloneo 20. Mär 2011 11:23

AW: einfache Animation
 
Hallo,
danke für die Antwort :),ich habe mittlerweile die for-Schleife entfernt um zu schauen ob die Animation auch so funktioniert und das tut sie immer nocht nicht, liegt vielleicht an der Initialisierung?

alfold 20. Mär 2011 11:25

AW: einfache Animation
 
Ich habe noch mal editiert schau die kommentare.

alfold

sx2008 20. Mär 2011 11:26

AW: einfache Animation
 
Ausserdem brauchst du einen Zähler für deine Bilder.
Diese Zählervariable sollte im Formular liegen:
Delphi-Quellcode:
TForm1 = class(TForm)
...
private
  FBildNr : integer;
...
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // ein cooler Trick, wie man ohne "case" auskommt
  Image1.Visible := (FBildNr = 0);
  Image2.Visible := (FBildNr = 1);
  Image3.Visible := (FBildNr = 2);
  Inc(FBildNr);
  if FBildNr > 2 then
    FBildNr := 0;
end;

Coloneo 20. Mär 2011 11:34

AW: einfache Animation
 
Ok da war ich ja richtig blöd...:pale:
Mit den Tipps hats endlich geklappt und eleganter siehts auch aus,
danke euch:-D.

alfold 20. Mär 2011 11:37

AW: einfache Animation
 
Zitat:

Zitat von Coloneo (Beitrag 1089821)
Ok da war ich ja richtig blöd...:pale:

Würde sagen nein. Du hast die Fehler erkannt:thumb:

alfold


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 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