Timer 如何计数';关于事件';乘独木舟?

Timer 如何计数';关于事件';乘独木舟?,timer,capl,canoe,Timer,Capl,Canoe,我想在200米比赛中依靠这项赛事。 我在CanoeCapl中尝试过这个代码,但效果不好。 我不知道是什么问题。 请帮帮我 主要活动 variables { int timerConditionChecker = 0; int lockStatusMonitor = 0; mstimer conutCheckTimer; } on timer conutCheckTimer { //do nothing } on sysvar_update sysvar::Frame2 {

我想在200米比赛中依靠这项赛事。 我在CanoeCapl中尝试过这个代码,但效果不好。 我不知道是什么问题。 请帮帮我

主要活动

variables
{ 
  int timerConditionChecker = 0;
  int lockStatusMonitor = 0;

  mstimer conutCheckTimer;
}

on timer conutCheckTimer
{
  //do nothing
}

on sysvar_update sysvar::Frame2
{
    if(timerConditionChecker == 0)
    {
      lockStatusMonitor++;
      timerConditionChecker = 1;
      setTimer(conutCheckTimer, 500);
    }
    else if(timerConditionChecker == 1)
    {
      if(timeToElapse(conutCheckTimer) > 200)
      {
        timerConditionChecker = 2;
      }
      else
      {
        lockStatusMonitor++;
      }
    }
    else if(timerConditionChecker == 2)
    {
      timerConditionChecker = 3;
      Write("lockStatusMonitorCount = %d",lockStatusMonitor);
    }
    else{}
}
这个呢(我主要使用变量名):

变量
{ 
int lockStatusMonitor=0;
mstimer-conutCheckTimer;
}
on定时器conutCheckTimer
{
//在200毫秒后调用,并将输出在这200毫秒内更新sysvar的频率
写入(“lockStatusMonitorCount=%d”,lockStatusMonitor);
}
在sysvar\u上更新sysvar::Frame2
{
如果(isTimerActive(conutCheckTimer))
{
//如果200米已经开始,就数一数
lockStatusMonitor++;
}
否则{
//计时器尚未激活,因此现在开始计算下一个200毫秒
lockStatusMonitor=0;//或=1,具体取决于您的用例
设置计时器(conutCheckTimer,200);
}
}

除此之外,使用CAPL调试器应该可以帮助您解决此类问题。

您希望实现什么,以及哪些功能不正常?我想计算一下sysvar\u更新的次数。。我原以为是10次,但结果是1。。我想检查我的代码是否错误。你想计算在200毫秒内调用sysvar\u update…的频率吗?还是500毫秒?还是300毫秒?正如您从代码中看到的,只有当系统变量第一次更新时,或者如果以后的更新没有在第一次更新后的300毫秒之前出现,才会增加
lockStatusMonitor
。如果第二次更新发生在第一次更新后300毫秒内,则计数将保持为1。这就是你想要的吗?谢谢你的评论,先生在SysValUpdate Sysav::Frime2将更新20ms,所以我将检查10次更新为200毫秒。@鲍勃,如果这个答案解决了你的问题,你应该考虑。