Entwickler-Ecke
Sonstiges (Delphi) - Variablenproblem mit Timer
MydroF - Mo 10.08.09 16:34
Titel: Variablenproblem mit Timer
Hi.
Hab für nen Klickspiel mal einen Code gefunden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.L1Click(Sender: TObject); Var zeit:double; begin
B11.Visible:=true; Zeit:=now+1.0*(1.0/86400.0); while (now<=Zeit) do Application.processMessages; B11.Visible:=false; end; |
Man clickt also den Startbutton, ein anderer Button wird sichtbar, drückt man auf diesen, würde er wieder unsichtbar werden, und ein neuer Button erscheint, usw.
Klickt man den erscheinenden Button nicht innerhalb
einer Sekunde an, verschwindet er wieder, und man muss wieder den Startbutton (L1) drücken.
Nun wollte ich den Button Variablenabhängig machen. Wenn man ein Level wählt, wird dementsprechend in dementsprechenden Editfeld eine '1' aktiv, und eine Variable (die eine Zeit angibt) wird abgefragt.
Das sollte nun so aussehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.L1Click(Sender: TObject); Var zeit,a:double; begin if (Lev1Var.Text='1') then a:=strtofloat(Lev11.Text); if (Lev2Var.Text='1') then a:=strtofloat(Lev12.Text); if (Lev3Var.Text='1') then a:=strtofloat(Lev13.Text); if (Lev3Var.Text='1') then a:=strtofloat(Lev14.Text);
B11.Visible:=true; Zeit:=now+a*(1.0/86400.0); while (now<=Zeit) do Application.processMessages; B11.Visible:=false; end; |
In den Lev11.Text (Editfelder), Lev12.Text, usw. stehen die Anzahl der Sekunden, die dann in der Variable a auftauchen sollen. Nur leider funktioniert der Code nicht. Wahrscheinlich liegts daran, dass "a" in der Rechnung nicht erkannt wird als sekundenanzahl=(
Wie soll der Code aussehen, damits funzt?
Moderiert von
Gausi: Color-Tags durch Delphi-Tags ersetzt.
der organist - Mo 10.08.09 16:44
Hi,
und :welcome: im Forum. Was mir aufgefallen ist:
Delphi-Quelltext
1:
| if (Lev1Var.Text='1') then a:=strtofloat(Lev11.Text); |
einmal hast du da ein "Var", ich weiss nicht, ob das so gewollt ist, andererseits:
Delphi-Quelltext
1:
| if (Lev1Var.Text='1') then a:=strtofloat(Lev11.Text); |
Kann es sein, dass da eine "1" zu viel ist, wenn du links 1 (bzw. 2,3..) und rechts 11 (bzw. 12,13..) stehen hast?
MydroF - Mo 10.08.09 16:50
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
Hat seine Richtigkeit, die Editfelder sind so von mir benannt worden, damit ich mich aus den zig Editfeldern herausfinde.
Ein Klick auf den "Leicht" Button bei der Levelabfrage, lässt in dem Editfeld "Lev1Var" eine "1" erscheinen, bei "Mittel" im Editfeld "Lev2Var", usw...
im Editfeld "Lev11" steht nun die Anzahl der Sekunden, die ich für Stufe "leicht" auswähle, klickt der Spieler "leicht", soll jeder Button für a=(Lev11.Text) Sekunden aktiv sein...
ziemlich kompliziert %P
Narses - Mo 10.08.09 17:26
Moin und :welcome: im Forum!
Du programmierst nicht ereignisorientiert und dein Absatz mit den vielen Edit-Feldern ist auch nicht gerade "übersichtlich" (-> und deshalb nicht pflegeleicht). :nixweiss:
Analysieren wir doch mal das Konzept:
- Der Button wird angezeigt
- Es wird ein Timer gestartet, wenn dieser Abläuft -> Game Over
- Wird der Button zwischendurch angeklickt, wird der Game-Over-Timer gestoppt, der Button irgendwohin verschoben (oder was auch immer), ein paar Punkte gezählt und der Game-Over-Timer wieder gestartet
- Das ganze läuft so lange, bis der Game-Over-Timer zuschlägt (man könnte zwischendurch auch die Game-Over-Zeitspanne verkürzen -> Level-Konzept)
Ich würde sagen, du brauchst bei diesem Ansatz:
- einen Button, mit dem man das Spiel startet
- den Weiter-Klick-Button
- einen Timer für die Game-Over-Erkennung
- falls du das mit den Leveln umsetzen willst, wäre ein Array mit den Zeitangaben für das Timeout nötig
Dazu nach Geschmack ein Label für das aktuelle Timeout und evtl. noch eins für den aktuellen Level. Fertig. :idea:
Dein aktueller Ansatz basiert auf einer APM-Schleife, das solltest du auf jeden Fall durch einen TTimer ersetzen (ist schnell genug dafür, so schnell kann jedenfalls keiner Klicken)! :|
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!