Einzelnen Beitrag anzeigen

xDIMAx

Registriert seit: 4. Feb 2012
5 Beiträge
 
#1

Timer einmalig sofort auslösen.

  Alt 1. Aug 2012, 19:55
Delphi-Version: 7
Guten Tag, ich würde gerne, wie im Titel beschrieben, einen Timer einmalig sofort auslösen und dann wieder in den Normalzustand versetzen, ohne, dass es zu Dopplungen oder Ähnlichem kommt.

Um diesen Teil des Programms zu erklären:
Man hat einen Shape, der per Timer zufällig versetzt wird. Innerhalb des Intervalls muss der Shape berührt werden, damit "das Spiel" nicht vorbei ist. Wenn man sich verklickt endet das Spiel ohne, dass man den Shape noch klicken kann. Ich will nun verhindern, dass nachdem man entweder erfolgreich war, oder Game Over ist, direkt der nächste Schritt folgt. Also die Versetzung des Shapes, wenn man den Shape geklickt hat, oder der Punktescreen, wenn man verliert, weil entweder der Intervall abegelaufen ist und man nichts geklickt hat, oder sich verklickt hat.


Delphi-Quellcode:
procedure TForm1.FormClick(Sender: TObject);
begin
  H:=1; //Zufällige Variable, um dem Timer anzuzeigen, ob die Form angeklickt wurde.
  Timer1.Interval:=1;
end;

procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  G:=0; //Zufällige Variable, um dem Timer anzuzeigen, ob der Shape angeklickt wurde.
  Timer1.Interval:=1;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Form1.Timer1.Interval:=TI; //TI ist der ursprüngliche Timerintervall. //////////XXXXX//////////
  if (G=0) and (H=0) then
    begin //Soll passieren, wenn der Shape innerhalb des Intervalls angeklickt wurde.
      G:=1; //G:=1; Sorgt dafür, dass man den Shape anklicken muss, um den Then-Befehl auszuführen.
      H:=0;
      Shape1.Left:=trunc(random*(Form1.Width-64))+16;
      Shape1.Top:=trunc(random*(Form1.Height-64))+64;
    end
  else
    begin
      Button1Click(Self); //Soll passieren, wenn entweder die Form oder gar nichts innerhalb des Intervalls angeklickt wurde.
    end;
end;
Das Problem ist nun, dass wenn ich den Timerintervall zurücksetzte (siehe Quellcode://///XXXXX/////), der ganze Then-Befehl nicht ausgeführt wird, wodurch der Ablauf des Intervalls keine Auswirkung mehr hat und man nur weiterkommt, indem man richtig klickt oder sich verklickt.
Also im Grunde funktioniert das Verlieren, durch Ablauf der Zeit nicht mehr.
Ich hoffe mein Problem irgendwie kenntlich machen oder mich viel zu wiederholen, hehe.


P.S. Für zukünftige Threads: Kann man den Titel des Threads noch verändern? Wenn ich ihn mir jetzt nochmal durchlese, kommt er mir ein bisschen komisch vor.

Geändert von xDIMAx ( 1. Aug 2012 um 20:00 Uhr)
  Mit Zitat antworten Zitat