Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Tbitmap für Animation (https://www.delphipraxis.net/89781-tbitmap-fuer-animation.html)

schrimm 5. Apr 2007 15:21


Tbitmap für Animation
 
Also ich will animiertes erzeugen (Andorra geht nicht, weil delphi 5).
da hab ich das mit dem Tbitmap gemacht, wo es immer mit nem Timer das Bild jeweils nach rechts schiebt (ich habe die einzelbilder in einem bmp)
Delphi-Quellcode:
 case c of //c als Zählvariable
  0..9: begin
       Bmp := TBitmap.Create;
       try
         Bmp.LoadFromFile('floating_e.bmp');
         Iskull.Canvas.Draw(-1*(c*48), 0, Bmp); //48 ist Bildbreite der Einzelbilder
       finally
         FreeAndNil(Bmp);
       end;
      inc(c);
      if c>9 then //wenn alle einzelbilder durch, wieder von vorn beginnen
       begin
        c:=0;
       end;
     end;
 end;
Das Problem: bisher ging es nur so, wie ich es oben habe, ich lade da aber jedes mal das Bild neu, kann man das irgendwie so schreiben, dass es nur bei c=0 das lädt und in den restlichen dann das geladene anwendet? oder sollte ich alles anders machen?

Matze 5. Apr 2007 15:24

Re: Tbitmap für Animation
 
Zitat:

Zitat von schrimm
kann man das irgendwie so schreiben, dass es nur bei c=0 das lädt und in den restlichen dann das geladene anwendet?

Du beantwortest dir die Frage ja selbst:

Delphi-Quellcode:
if c = 0 then
  Bmp.LoadFromFile('floating_e.bmp');
Das Bitmap müsstest du dann natürlich außerhalb der Case-Anweisung erstellen/freigeben. Die Case-Anweisung müsste dann (samt Schleife oder was du nutzt) in den try-Abschnitt.

schrimm 5. Apr 2007 15:47

Re: Tbitmap für Animation
 
Delphi-Quellcode:
procedure TForm1.TskullTimer(Sender: TObject);
var
  Bmp: TBitmap;
begin
label1.caption:=inttostr(c);
try
 if c=0 then
  begin
   Bmp := TBitmap.Create;
   Bmp.LoadFromFile('floating_e.bmp');
  end;
 case c of
  0..9: begin
         Iskull.Canvas.Draw(-1*(c*48), 0, Bmp);
       inc(c);
      if c>9 then
       begin
        c:=0;
       end;
     end;
 end; //case of ende
finally
 FreeAndNil(Bmp);
end;
end;
So ist es jetzt, nun müsste mir noch jemand sagen, wo das finally und so hin muss, weil so geht es nicht, da hat der bei der ausführung bem 1. befehl nach dem convas ein problem

Namenloser 5. Apr 2007 15:56

Re: Tbitmap für Animation
 
Hmm, so vielleicht?
Delphi-Quellcode:
procedure TForm1.TskullTimer(Sender: TObject);
var
  Bmp: TBitmap;
begin
label1.caption:=inttostr(c);
Bmp := TBitmap.Create;
try
  Bmp.LoadFromFile('floating_e.bmp');
  c := c mod 10; // nach 9 kommt wieder 0
  Iskull.Canvas.Draw(-1*(c*48), 0, Bmp);
  inc(c);  
finally
  FreeAndNil(Bmp);
end;
end;
Noch besser wäre es natürlich, wenn das bitmap nicht bei jeden ontime-aufruf geladen werden müsste, z.b. so:

Delphi-Quellcode:

var
  Bmp: TBitmap;

...

procedure TForm1.TskullTimer(Sender: TObject);
begin
  label1.caption:=inttostr(c);
  c := c mod 10; // nach 9 kommt wieder 0
  Iskull.Canvas.Draw(-1*(c*48), 0, Bmp);
  inc(c);  
end;

...

initialization
  Bmp := TBitmap.Create;
  Bmp.LoadFromFile('floating_e.bmp');

finalization
  FreeAndNil(Bmp);
edit: [ot]Öhm, Schrimm, bei deiner Homepage kommt bei mir eine Virus-Meldung o.O[/ot]

schrimm 5. Apr 2007 16:04

Re: Tbitmap für Animation
 
das 2. Funktioniert super :bounce1:
ich kannte das initialization noch gar nicht, ist abe reine gute variante
danke für eure Hilfe :hello:


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