如何获得一个TTimer来重复调用有限次数的功能?

时间:2018-10-08 14:06:53

标签: delphi

我想对遍历X次的令牌进行动画处理。

在这种情况下,X是骰子上滚动的数字。

例如,如果玩家掷出3,我希望看到标记“移动”到下一个图块,然后在400ms之后到下一个图块,然后在400ms之后到最后一个图块。

我尝试使用TTimer,它可以使动画效果很好,但是它不会使令牌停在右侧图块上。使用for循环会导致令牌最终出现在右侧图块上,但没有动画。我只希望TTimer重复X次。 :)

我的代码如下(使用Delphi 2010):

对于For循环:

for i := 1 to iNum + 1 do // iNum is the number rolled
  player1.Left := player1.Left + 200; // player1 is the token` 

对于TTimer:

procedure TfrmSnakesNLadders.tmrMoveTimer(Sender: TObject);
begin
  player1.Left := player1.Left + 200;
  if player1.Left >= 850 then // 850 is the Rightmost Boundary of the token
    tmrMove.Enabled := false;
end;

1 个答案:

答案 0 :(得分:1)

您没有向我们展示如何初始化player1.right,但是它看起来像是边界条件错误,即您的850值不应该是850。但是要滚动x次,请初始化类变量并对其进行计数。像这样:

class TfrmSnakesNLadders = class( Form )
….
private
  fNum : integer
….

然后初始化并启动计时器,类似

….

procedure TfrmSnakesNLadders.InitMove;
begin
  fNum := 0;
  tmrMove.Enabled := true;
end;

然后为您的计时器设置动画

procedure TfrmSnakesNLadders.tmrMoveTimer(Sender: TObject);
begin
  player1.Left := player1.Left + 200;

  inc( fNum);
  if fNum >= iNum  then
    tmrMove.Enabled := false;
end;