AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Countdown

Ein Thema von ByStones2 · begonnen am 7. Jun 2006 · letzter Beitrag vom 7. Jun 2006
Antwort Antwort
ByStones2

Registriert seit: 6. Okt 2005
Ort: Birenbach
133 Beiträge
 
Turbo Delphi für Win32
 
#1

Countdown

  Alt 7. Jun 2006, 16:46
Hi,

ich würde gern einen Countdown von 9,9s zu null machen, wenn er bei null angelangt ist, soll er wieder bei 9,9 beginnen.
Das ganze soll eine unedlichkeitsschleife werden.
Mein Code geht nur nicht, denn er geht ins minus statt von 9,9 zu beginnen:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if timetoharvest <> 0.0 then
begin
timetoharvest := timetoharvest - 0.1;
Label5.Caption := floattostrf(timetoharvest,ffnumber,8,1)+' s';
end
else
timetoharvest := 9.9;
end;
Wer nämlich mit "h" schreibt ist dämlich.
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Countdown

  Alt 7. Jun 2006, 16:53
Mach doch aus dem
if timeToHarvest <> 0 ein
if timeToHarvest > 0 Das würde doch für deine Zwecke langen denke ich. Grund für das Scheitern ist wahrscheinlich die "Ungenauigkeit" von float-Werten.
  Mit Zitat antworten Zitat
sgmeiner

Registriert seit: 22. Feb 2006
10 Beiträge
 
#3

Re: Countdown

  Alt 7. Jun 2006, 16:54
Einfachste Lösung scheint mir die zu sein:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if timetoharvest >= 0.0 then
begin
timetoharvest := timetoharvest - 0.1;
Label5.Caption := floattostrf(timetoharvest,ffnumber,8,1)+' s';
end
else
timetoharvest := 9.9;
end;
Einen Vergleich mit Floats durchzuführen wird auf selten gelingen, da die intern nie exakt 0.0 sein werden sondern für die CPU immer was krummes wie 0.000000000521 dargstellen.
  Mit Zitat antworten Zitat
ByStones2

Registriert seit: 6. Okt 2005
Ort: Birenbach
133 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Countdown

  Alt 7. Jun 2006, 17:02
Zitat von sgmeiner:
Einfachste Lösung scheint mir die zu sein:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if timetoharvest >= 0.0 then
begin
timetoharvest := timetoharvest - 0.1;
Label5.Caption := floattostrf(timetoharvest,ffnumber,8,1)+' s';
end
else
timetoharvest := 9.9;
end;
Einen Vergleich mit Floats durchzuführen wird auf selten gelingen, da die intern nie exakt 0.0 sein werden sondern für die CPU immer was krummes wie 0.000000000521 dargstellen.
OK, dann muss es halt ein bisschen verzögert sein, dann ist aber das ganze prinzip kaputt, weil es die Zeit bis zur Ernte anzeigen soll, und wenn sich das dann immer und 0,0000000521 verschiebt, dann sind das nach 1000 Ernten auch 0,0000521000 sekunden und dazu kommt noch, dass die Erntezeit durch arbeiter um jeweils 0,1 sekunden verkürzt wird, wobei es aber maximal 10 Arbeiter sein können.
Das ganze muss ich mit einplanen.
Könnte man vielleicht es so machen, dass sich die Zahl alle 9,9 sekunden mit dem interval von GeldTimer abstimmt ????
Die Variable für arbeiter heißt arbeiter ...
Wer nämlich mit "h" schreibt ist dämlich.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Countdown

  Alt 7. Jun 2006, 17:09
Benutz halt keine Kommazahlen

Statt mit 9.9 nimmst du halt 99 und ziehst immer 1 ab.
  Mit Zitat antworten Zitat
ByStones2

Registriert seit: 6. Okt 2005
Ort: Birenbach
133 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Countdown

  Alt 7. Jun 2006, 17:14
Zitat von Spider:
Benutz halt keine Kommazahlen

Statt mit 9.9 nimmst du halt 99 und ziehst immer 1 ab.
könntest du mir bitte den quelltext posten
Wer nämlich mit "h" schreibt ist dämlich.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Countdown

  Alt 7. Jun 2006, 17:26
Hmm,

Delphi-Quellcode:
// Deins:
// TimeToHarvester: Double; // Oder ähnlich

// Meins
  TimeToHarvester: Integer;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if timetoharvest >= 0 then
begin
timetoharvest := timetoharvest - 1;
Label5.Caption := floattostrf(timetoharvest / 10,ffnumber,8,1)+' s';
end
else
timetoharvest := 99;
end;
o.Ä.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:18 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