我想指定要重复的操作。
使用名为spbRewind的按钮调用该操作。按下spbRewind后,将进入Rewind模式。TimeForRewind使用设置为10ms的计时器设置(因此,理论上,该操作将每10ms重复一次)。
下面是代码:
TimeForRewind := Rewind and (CurrTime - PrevCallTime > IdealFrameTimeMSRewind);
if TimeForRewind then
begin
repeat
GotoSaveState(Game.CurrentIteration -4, 0);
until ???;
end;
我需要“until???”变成“until the button is pressed again”,但我不知 prop 体该怎么做。
1条答案
按热度按时间33qvvth11#
你在评论中所说的:
看起来像是内存灾难。每次运行这段代码,你都会创建一个新的
TTimer
,但你从来没有释放过它们(或者你可能释放了?)与其不断地创建新的计时器,并希望释放它们,不如在设计时或启动时创建一次计时器,并使其处于禁用状态(
Timer.Enabled = False
),然后,当需要它时,只需启用它,当不需要它时,再次禁用它。我知道你想用一个切换类型的按钮来控制它,所以例如:
评论后编辑
假设你有一个表单,比如说你把它命名为
MyForm
,最简单的方法是在设计时把TTimer
组件从Tool Palette
-System
放到表单中(就像你对TButton
所做的那样),把Timer1
重命名为RewindTimer
。将
Interval
属性设置为200(即毫秒)并双击timer控件,这将在表单中创建事件处理程序procedure RewindTimerTimer(Sender: TObject);
声明和实现存根从这里你可以调用
GotoSaveState(...)
。是的,但是如果你把计时器整合到你的形态中就不需要了。形态会处理破坏。
如果你按照第一点所述在窗体中添加计时器,这个问题就会消失。