Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Animation über TImageList (https://www.delphipraxis.net/111981-animation-ueber-timagelist.html)

kroete 12. Apr 2008 19:50


Animation über TImageList
 
Hallo
Ich schlage mich hier gerade wie in dem anderem Thread beschrieben mit einer Animation von Bildern aus einer Imagelist.

In der Imagelist habe ich 0-7 also 8 *.bmp von 12x12 pixeln Größe jeweils und möchte diese an einer am besten dynamischen Stelle eines Images (hier: Image1 bzw test) anzeigen, um dort eine Animation vorzutäuschen.

Ich bin auf die Idee gekommen, das vielleicht über einen Timer zu steuern, damit man auch wirklich etwas von der Animation mitbekommt und die Frameverzögerung leicht einstellen kann.

Delphi-Quellcode:
procedure TForm1.b_testClick(Sender: TObject);
begin
  functions.func.clean ( test , clWhite ); // Bild weiß füllen
  p := 0; // Globale zählvariable auf 0
  animate.Enabled := true; // Timer enablen
end;

procedure TForm1.animateTimer(Sender: TObject);
begin
  // 0,0 sind die Zielkoordinaten
  l_test.Caption := 'Frame: ' + IntToStr ( p );
  imgl_1.Draw(test.Canvas, 0 , 0 , p);
  l_test.Caption := 'Frame: ' + IntToStr ( p );
  Inc(p);
  if p > imgl_1.Count then
    begin
      p:=0; sleep ( 1000 ); animate.Enabled := false;
    end;
end;
Jetzt zählt er richtig, dennoch wird garkein Bild mehr angezeigt o.O

Wie kann ich das ändern?

Wäre echt toll, wenn mir einer von euch helfen würde!

kroete

wido 12. Apr 2008 20:24

Re: Animation über TImageList
 
Liste der Anhänge anzeigen (Anzahl: 1)
Du musst das Image Refreshen. Füg mal ein test.Refresh; oder alternativ ein test.Repaint; nach dem Malen ein.

Ich hab das ganze auch mal ausgecodet. Kleine Testapp ist im Anhang inkl. Source. Die Testapp iteriert durch alle Bilder einer Imagelist und zeigt alle 100ms ein anderes Bildchen an. Ist keine Animation, aber naja. Das Prinzip wirst eh sehen ;).

kroete 12. Apr 2008 21:58

Re: Animation über TImageList
 
Besten Dank, wido.
Ich hab das jetzt folgendermaßen gemacht:
Ich hab mir ein _neues_ Bild erstellt, 12x12 px, welches von der Animation betroffen ist. "f_ship.anim"
Wenn ich animieren will (schießen um genau zu sein), muss ich nun erstmal die x und y-koordinaten angeben, wohin die animation gehen soll und dann den timer anmachen.

Da es wie gesagt um Schiffeversenken geht, wird danach in diesem Feld angezeigt ob es Wasser, oder eben ein getroffenes Schiff ist.

Da der Timer aber "nebenbei" läuft, sieht das doof aus, da mitten in der Animation die Wasser bzw. Getroffen-grafik gemalt wird (also kreis oder kreuz).

Wie kann ich eben das _nachdem_ der Timer durchgelaufen ist machen?

---------------------------------------

Erledigt - für die, dies interessiert: Einfach das, was danach kommen soll im Timer aufrufen!


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