![]() |
Animation mit TImage!
Hallo,
ich hoffe Ihr könnt mir weiterhelfen: Ich möchte gerne einen Tamagotchi für meine Freundin programmieren, da es interesannter ist wenn sich das Tamagotchi wie im echten leben halt bewegt komm ich auch zu meiner ersten Frage wie kann ich eine Animation OHNE DelphiX oder DirectX oder OpenGL oder oder oder erstellen ich möchte keinen Schnickschnack mit einbinden sonder nur mit den Standartkomponennten von Delphi 6 dieses Problem lösen nur fehlt mir im momment noch das nötige Wissen dazu bin absoluter Delphi Beginner. Nunja vielleicht könnt ihr mir weiterhelfen bislang hab ich es so versucht:
Delphi-Quellcode:
Das dumme ist ja das so auch gleichzeitig eine ENDLOSschleife realisiert wurde was wieder nicht meinen Wünschen entsprach. Ich würde gerne diese Animation von den drei Bilder im Hintergrund laufen lassen. procedure TForm1.FormCreate(Sender: TObject); var temp: integer; begin for temp:=0 to 3 then Image1.Picture.LoadFromFile('pics/1_'+FloatToStr(temp)+'.bmp'); end; Was noch ein Problem ist wie ich es hinkriegen soll das die FOR Schleife nachdem er auf 3 gezählt hat nochmal von vorn beginnen soll mit GOTO könnte das klappen nur soll man ja nicht umbedingt auf diesen Befehl zurückgreifen so kenn ich das aufjedenfall auf C++ und C Zeiten :) |
wenn temp nen integer ist, wieso nimmst du dann nicht 'IntToStr'?
wenn du einfach
Delphi-Quellcode:
vor das end schreibst, dann sollte es wieder von vorne los gehen
if temp = 3 then temp:= 0
haettest aber wieder ne endlos-schleife Mat |
Hallo also es gibt zwei arten wie du eine Animation in dein Programm ein bauen kannst mit
![]() |
meinen tip kannst du getrost vergessen, das klappt so nicht under delphi... :(
wenn er nach 3 wieder bei 0 anfangen soll, muesstest du noch ne schleife 'drumrum bauen'.
Delphi-Quellcode:
while 1 = 1 do
begin for temp:=0 to 3 Do begin .. end; end; Mat |
Zitat:
Zitat:
Delphi-Quellcode:
Nur wie gesagt ich will auch den Intervall vielleicht etwas drosselt weil der FOR Zähler ist so schnell habs mal getestet und die Zahl die grad "temp" ist in die Caption der Titelleiste gelegt oh meine Güte geht das schnell und so schnell wie sieht das den aus, und was ist das für eine Animation mit über 24 Bilder die ein Mensch als FLÜSSIG bezeichnen kann meine liegt min. bei 90-gar500 Bildern :(
procedure TForm1.FormCreate(Sender: TObject);
var temp: integer; begin for temp:=1 to 3 do begin Image1.Picture.LoadFromFile('pics/1_'+FloatToStr(temp)+'.bmp'); end; if temp = 3 then temp:= 0; end; |
Zitat:
Danke nochmals Mat und City Light für die Einträge. |
THEMA CLOSEN :)
So ich habs doch noch hingekriegt :)
Hier der Code nochmals danke für eure Hilfe :)
Delphi-Quellcode:
var
Form1: TForm1; Image1: TImage; temp: Integer; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin if temp = 1 then begin Image1.Picture.LoadFromFile('pics/1_'+IntToStr(temp)+'.bmp'); Form1.Caption:=IntToStr(temp); temp:= 2; end else if temp = 2 then begin Image1.Picture.LoadFromFile('pics/1_'+IntToStr(temp)+'.bmp'); Form1.Caption:=IntToStr(temp); temp:= 3; end else if temp = 3 then begin Image1.Picture.LoadFromFile('pics/1_'+IntToStr(temp)+'.bmp'); Form1.Caption:=IntToStr(temp); temp:= 1; end; end; procedure TForm1.FormCreate(Sender: TObject); begin temp:= 1; end; end. |
hehe.. auf die idee mit nem timer bin ich auf grad gekommen :)
allerdings ist mein timer kuerzer :)
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin Image1.Picture.LoadFromFile('Image'+IntToStr(temp)+'.bmp'); temp := temp + 1; if temp = 4 then temp := 0 end; Mat |
Moin Zusammen,
und je nachdem, wie lang das Timer Interval eingestellt ist wäre es sinnvoll zu Beginn der OnTimer Routine den Timer ab- (enabled := false), und am Ende wieder einzuschalten, ansonsten kann es passieren, dass OnTimer erneut aufgerufen wird, wärend noch das Bild vom vorherigen Aufruf geladen wird. LoadFromFile kann ja dauern (je nach Bildgrösse) Dabei fällt mir ein: Man könnte die Bilder, falls sie denn nicht zu gross sind, auch als Resource mit in das Programm einbinden. Das spart dann zusätzliche externe Dateien. |
Zitat:
Delphi-Quellcode:
PS: Aber nun kommt ein neues Problem drauf zu hehe sorry :) Also wie krieg ich es hin das das Bild nicht FLAKERT ??? :freak: procedure TForm1.Timer1Timer(Sender: TObject); begin Image1.Picture.LoadFromFile('pics/1_'+IntToStr(temp)+'.bmp'); inc(temp); if temp = 4 then temp := 1; end; procedure TForm1.FormCreate(Sender: TObject); begin temp:= 1; end; Man muß doch die Images davor irgendwie precatchen sprich zwischenspeichern können ... hab mal was von Blitblt oder so ähnlich gelesen hab aber noch null Ahnung wie das geht :) :coder: |
Versuch mal im FormCreate mit
Delphi-Quellcode:
Form1.DoubleBuffered := True; |
Zitat:
|
mit dem flackern weiss ich nicht, aber evtl. hilft es, wenn du
die Bilder auf Variablen packst
Delphi-Quellcode:
Image1 := TPicture.Create;
Image1.LoadFromFile('image1.bmp'); Image2 := TPicture.Create; Image2.LoadFromFile('image2.bmp'); Mat |
mehr weiß ich leider auch nicht wie man das abstellen könnte. Vielleicht wenn du mit den Timmer Inteval rumspielst...?
|
Zitat:
|
Also hier hab ich mal einen Code der einen Käfer FLACKERFREI über einen Hintergrund laufen läßt. Kannst du mir bei dem Code bischen Helfen?
Delphi-Quellcode:
Wie kann ich ihn bei meiner simplen Animation verwenden?
procedure TForm1.Kaeferanimation;
var Temp: TBitmap; KaeferArray, NegativArray : array [1..4] of TBitmap; xmirror, ymirror : shortint; x, y, idx : integer; begin xmirror := 1; ymirror := 1; y := 1; idx := 1; Temp := TBitmap.create; Temp.Width := 42; Temp.Height := 42; For x := 1 to 4 do begin KaeferArray[x] := TBitmap.create; NegativArray[x] := TBitMap.create; KaeferArray[x].Width := 40; NegativArray[x].width := 40; KaeferArray[x].Height := 40; NegativArray[x].Height := 40; end; x := 1; Kaeferarray[1].LoadFromFile('Bilder\ru.bmp'); Kaeferarray[2].LoadFromFile('Bilder\ro.bmp'); Kaeferarray[3].LoadFromFile('Bilder\lo.bmp'); Kaeferarray[4].LoadFromFile('Bilder\lu.bmp'); NegativArray[1].LoadFromFile('Bilder\nru.bmp'); NegativArray[2].LoadFromFile('Bilder\nro.bmp'); NegativArray[3].LoadFromFile('Bilder\nlo.bmp'); NegativArray[4].LoadFromFile('Bilder\nlu.bmp'); try While isrunning do begin sleep(Scrollbar1.Position); x := x + 1 * (xmirror); y := y + 1 * (ymirror); BitBlt(Temp.Canvas.Handle, 0, 0, 42, 42, bg.Canvas.Handle, x, y, SRCCOPY); BitBlt(Temp.Canvas.Handle, 1, 1, 40, 40, Negativarray[idx].Canvas.Handle, 0, 0, SRCAND); BitBlt(Temp.Canvas.Handle, 1, 1, 40, 40, Kaeferarray[idx].Canvas.Handle, 0, 0, SRCINVERT); BitBlt(Paintbox1.Canvas.Handle, x, y, 42, 42, Temp.Canvas.Handle, 0, 0, SRCCOPY); If (y + 40 > Paintbox1.Height) or (y <= PaintBox1.Top) then begin ymirror := ymirror * (-1); if (xmirror = 1) and (ymirror = 1) then idx := 1 else if (xmirror = 1) and (ymirror = -1) then idx := 2 else if (xmirror = -1) and (ymirror = -1) then idx := 3 else if (xmirror = -1) and (ymirror = 1) then idx := 4 end else If (x + 40 > PaintBox1.Width) or (x <= PaintBox1.Left) then begin xmirror := xmirror * (-1); if (xmirror = 1) and (ymirror = 1) then idx := 1 else if (xmirror = 1) and (ymirror = -1) then idx := 2 else if (xmirror = -1) and (ymirror = -1) then idx := 3 else if (xmirror = -1) and (ymirror = 1) then idx := 4; end; Application.ProcessMessages; end; finally Temp.Free; For x := 1 to 4 do begin KaeferArray[x].Free; NegativArray[x].Free; end; end; end; procedure TForm1.FormCreate(Sender: TObject); var Jpg:TjpegImage; begin Bg := TBitmap.Create; Jpg := TJpegImage.Create; try jpg.LoadFromFile('Bilder\Background.jpg'); Bg.Assign(Jpg); finally Jpg.Free; end; end; procedure TForm1.PaintBox1Paint(Sender: TObject); begin BitBlt(Paintbox1.Canvas.Handle, 0, 0, 360, 245, Bg.Canvas.Handle, 0, 0, SRCCOPY); end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin isrunning := not isrunning; If isrunning then SpeedButton1.Caption := 'Stop' else SpeedButton1.Caption := 'Start'; BitBlt(Paintbox1.Canvas.Handle, 0, 0, 360, 245, Bg.Canvas.Handle, 0, 0, SRCCOPY); Kaeferanimation; end; procedure TForm1.FormDestroy(Sender: TObject); begin Bg.free; end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin isrunning := not CanClose; end; end. |
k.A. :)
einfach mal ausprobieren.. Mat :D |
Schau mal auf den letzten Post von mir MAT please :)
|
Anderer Vorschlag nihm eine Gif Animation oder ein Bild! Und versuch mal dieses hier...fühge für Label einfach Image ein..
Delphi-Quellcode:
//Laufschrift von Rechts nach Links
var h : integer; procedure TForm1.Timer1Timer(Sender: TObject); begin with Label1 do begin Left := Left -1; if Left =(0 -Left){oder 0- Width} then Left := h; end; end; procedure TForm1.FormResize(Sender: TObject); begin h := Form1.ClientWidth -32; Label1.Left := h; end; |
Bist du ein bischen Durcheinander?
Ich glaube das war der Falsche Quelltext den du hier oben gepostet hast *g* ist ja auch schon früh :) :coder: |
So Problem auch gelöst!
Delphi ist ja EaSY :) gefällt mir :) Also hier der Code fürs rukelfreie :)
Delphi-Quellcode:
Man muß einfach das Pic in einem Image laden und dann in eine Paintbox kopieren uns schon gehts :)
procedure TForm1.Timer1Timer(Sender: TObject);
begin Image1.Picture.LoadFromFile ('pics/1_'+IntToStr(temp)+'.bmp'); Paintbox1.Canvas.Draw(0,0,Image1.Picture.Graphic); inc(temp); if temp = 4 then temp := 1; end; procedure TForm1.FormCreate(Sender: TObject); begin temp:= 1; end; end. |
Wichtig dabei ist das dann das Image auf Visiab... auf False ist sonst sieht man es doppelt :)
|
wenn dein problem geloest ist, brauch ich mich ja nich durch die kaefer-animation fummeln.. *puh* hab ja auch noch nich soviel delphi ahnung
Mat |
Zitat:
Danke nochmals :firejump: |
Hier für Tamagotchi Fans ein JavaScript Tamagotchi sieht nur doof aus :)
![]() |
Eine ganz andere variante:
Wenn du Flash beherrschst kannst du einfach kleine Flash animationen nehmen und in einer WebBrowser Kompo anzeigen... wie gesagt falls du flash beherrschst ;) Die sind dann alle flackerfrei und leicht zu erstellen :bounce1: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz