![]() |
GetTickCount
Ich habe folgendes geschrieben:
Delphi-Quellcode:
An der Stelle wo das Programm die oben genannte Prozedur aufruft, bleibt es einfach stehen und man kann darin nichts mehr machen. Wie muss man mit "GettickCount" umgehen?
procedure TForm1.trash;
var start:longint; i:integer; begin repeat start:=gettickcount; if start+50=gettickcount then image4.picture.LoadFromFile('.\pics\trash_open1.bmp'); if start+100=gettickcount then image4.Picture.loadfromfile('.\pics\trash_open2.bmp'); if start+150=gettickcount then image4.Picture.LoadFromFile('.\pics\trash_blum.bmp'); if start+2150=gettickcount then image4.Picture.loadfromfile('.\pics\trash.bmp'); inc(i); until i=10; end; |
Re: GetTickCount
Wie wäre es, wenn du statt dem = ein <= nimmst? So wie es jetzt ist, geht das nur, wenn der Computer es exakt in der richtigen Millisekunde schafft.
EDIT: Der Fehler liegt noch wo ganz anders. Du musst es so machen:
Delphi-Quellcode:
procedure TForm1.trash;
var start:longint; i:integer; begin repeat start:=gettickcount; repeat Application.ProcessMessages until GetTickCount>=start+50; image4.picture.LoadFromFile('.\pics\trash_open1.bmp'); repeat Application.ProcessMessages until GetTickCount>=start+100; image4.Picture.loadfromfile('.\pics\trash_open2.bmp'); repeat Application.ProcessMessages until GetTickCount>=start+150; image4.Picture.LoadFromFile('.\pics\trash_blum.bmp'); repeat Application.ProcessMessages until GetTickCount>=start+250; image4.Picture.loadfromfile('.\pics\trash.bmp'); inc(i); until i=10; end; |
Re: GetTickCount
Zitat:
|
Re: GetTickCount
Application.ProcessMessages ist in diesem Fall nur ein Füller und heißt so viel wie "nichts tun bis 50 ms um sind."
Da ruckelt absolut gar nix. So wie du das gemacht hast, geht er das durch: start:=GetTickCount; //also ist start der Anfangswert if start+50=GetTickCount... //Hier ist höchstens eine Millisekunde vergangen, also ist die Bedingung nicht erfüllt und so geht das auch bei den anderen Bedingungen. Du musst praktisch WARTEN bis die 50 ms um sind, und das passiert bei meinem Code. |
Re: GetTickCount
Zitat:
füge mal ein i:=0 vor repeat ein.... |
Re: GetTickCount
Zitat:
Dat inner Schleife und die Anwendung friert für die Dauer der Schleife nicht ein. //Edit: roter Kasten, ick vermiss dir.. :zwinker: |
Re: GetTickCount
Zitat:
|
Re: GetTickCount
Zitat:
|
Re: GetTickCount
Jetzt tu mir nen Gefallen und benutze diesen Code. Einfach ausprobieren, bevor du mögliche Fehler kritisierst. Nebenbei würde ich die Bilder eher in eine ImageList laden, die Dinger 16 mal in der Sekunde aus der Datei zu laden ist ineffizient.
EDIT: Was meinst du, wie ein Timer funktioniert? Das ist nichts anderes als GetTickCount schön in ne Klasse verpackt.
Delphi-Quellcode:
procedure TForm1.trash;
var start:longint; i:integer; begin i:=0; repeat start:=gettickcount; repeat Application.ProcessMessages until GetTickCount>=start+50; image4.picture.LoadFromFile('.\pics\trash_open1.bmp'); repeat Application.ProcessMessages until GetTickCount>=start+100; image4.Picture.loadfromfile('.\pics\trash_open2.bmp'); repeat Application.ProcessMessages until GetTickCount>=start+150; image4.Picture.LoadFromFile('.\pics\trash_blum.bmp'); repeat Application.ProcessMessages until GetTickCount>=start+250; image4.Picture.loadfromfile('.\pics\trash.bmp'); inc(i); until i=10; end; |
Re: GetTickCount
Zitat:
Den Code hab ich ausprobiert und es ruckelt, das hats bei den 4 timern für jedes bild nich getan. |
Re: GetTickCount
Pack ne TImageList auf die Form. Doppelklick drauf, Bilder hinzufügen.
Und dann nur noch mit der DrawMethode auf das Bild zeichnen, Codebeispiel dürfte in der OH stehen. |
Re: GetTickCount
Mal ne doofe Frage:
Wozu brauchst du das? |
Re: GetTickCount
Ich glaube, er will zu einem Löschvorgang eine Art Animation eines Mülleimers abspielen.
|
Re: GetTickCount
Zitat:
---jaja, paintbox wäre besser, aber das is mir zu kompliziert--- |
Re: GetTickCount
Das meinst du nicht ernst, oder?
Mit mehreren Imageboxen und dann auch noch in einzelnen Prozeduren und die Bilder aus Dateien laden? Dass das ruckelt, glaube ich gerne. |
Re: GetTickCount
Zitat:
Ich selbst bin auch so eilig gewesen und wollte ein Spiel proggen, aber aus Erfahrung sag ich dir: DAT WIRD NICHTS ;) Fang erst mit was Kleinerem an und erst, wenn du dir wirklich sicher bist, dass du dich gut auskennst (wie z. B. mit DelphiX oder dergleichen), dann mach das hier nochmal ;) |
Re: GetTickCount
Zitat:
Dann macht er die selbe animation ja nicht 10 mal da die Zeit um ist. Einfach so:
Delphi-Quellcode:
Für ein spiel ist Paintox nicht ganz so schlecht wie Image aber immer noch grotten schelcht.
procedure TForm1.trash;
var start:longint; begin start:=gettickcount; repeat Application.ProcessMessages until GetTickCount>=start+50; image4.picture.LoadFromFile('.\pics\trash_open1.bmp'); repeat Application.ProcessMessages until GetTickCount>=start+100; image4.Picture.loadfromfile('.\pics\trash_open2.bmp'); repeat Application.ProcessMessages until GetTickCount>=start+150; image4.Picture.LoadFromFile('.\pics\trash_blum.bmp'); repeat Application.ProcessMessages until GetTickCount>=start+250; image4.Picture.loadfromfile('.\pics\trash.bmp'); end; nee.. da musst du direkt aufs Canvas Malen mit bitblt
Delphi-Quellcode:
Das ist, so weit ich weis, die schnelltste Möglichkeit fürs 2d malen.
BitBlt(form1.Canvas.Handle,x,y, bild.Width, bild.Height, bild.canvas.Handle,0 ,0,srccopy);
Dann musst du natürlicxh noch bei jedem ONPaint der Form neu Zeichen, damit nix flackert. :wink: |
Re: GetTickCount
Falsch. Am schnellsten gehts mit DirectX oder OpenGL. Allerdings schätze ich mich selbst jetzt mal etwas fortgeschrittener als den Ersteller dieses Threads ein, und OpenGL ist für mich noch "zu hoch".
|
Re: GetTickCount
So ich habs jetzt gelöst:
Delphi-Quellcode:
start wird dann in der Startprozedur deklariert. Also, es doch. Vielen Danke für eure Beiträge.
procedure TForm1.trash;
begin if gettickcount>=start+1000 then start:=gettickcount; if (start+50)<=gettickcount then image4.picture.LoadFromFile('.\pics\trash_open1.bmp'); if (start+100)<=gettickcount then image4.Picture.loadfromfile('.\pics\trash_open2.bmp'); if (start+150)<=gettickcount then image4.Picture.LoadFromFile('.\pics\trash_blum.bmp'); if (start+1000)<=gettickcount then image4.Picture.loadfromfile('.\pics\trash.bmp'); end; |
Re: GetTickCount
Trotzdem, nochmal:
=> Lass es sein und lerne Delphi erstmal grundlegend ;) MfG, air |
Re: GetTickCount
Zitat:
|
Re: GetTickCount
Wenn Du einen wirklich schnellen und genauen Timer willst, versuchst mit QueryPerformanceCounter.
grz zer00 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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 by Thomas Breitkreuz