【问题标题】:js - while loop only repeating oncejs - while 循环只重复一次
【发布时间】:2021-06-23 13:12:52
【问题描述】:

我正在学习编码。

我制作了以下脚本,如果执行将根据当前状态打开或关闭 raveMode。我的目标是让它在 raveMode 开启时重复一个 while 循环,直到它再次被关闭,然而,它似乎只能部分工作。 代码如下:

Delay = (ms) => new Promise(res => setTimeout(res, ms));
    

raveMode = !raveMode
    print(raveMode)
    while (raveMode) {
      SetVehicleLights(playerInfo.vehicle, 2);
      await Delay(300);
      SetVehicleLights(playerInfo.vehicle, 0);
    }

基本上,SetVehicleLights(..., 2) 会打开车灯,SetVehicleLighs(..., 0) 会关闭它们。但是,代码仅在 raveMode 开启时打开灯,并在 raveMode 关闭时关闭它们,而不是反复打开和关闭它们。

我在下面的代码中使用了相同的脚本,并且灯被打开和关闭一次,如本例所示:

if (!GetIsVehicleEngineRunning(playerInfo.vehicle)) {
      SetVehicleLights(playerInfo.vehicle, 2);
      await Delay(300);
      SetVehicleLights(playerInfo.vehicle, 0);
}

【问题讨论】:

  • 如果 ravemode 为真,我预计灯会亮起,延迟 300 秒,灯会瞬间关闭或可能根本不可见,然后灯会再次亮起。所以看起来灯刚刚亮着。
  • 谢谢你,@James,你是对的。我在关灯后添加了一个新的延迟。

标签: javascript loops while-loop fivem


【解决方案1】:

循环重复得很好。但是在循环的一次迭代结束时“关灯”与循环的下一次迭代开始时“打开灯”之间存在零延迟。所以你永远不会觉得灯关了。

由于您希望有两个明显的延迟,请添加第二个延迟:

while (raveMode) {
  SetVehicleLights(playerInfo.vehicle, 2);
  await Delay(300);
  SetVehicleLights(playerInfo.vehicle, 0);
  await Delay(300);
}

【讨论】:

    【解决方案2】:
    while (raveMode) {
      SetVehicleLights(playerInfo.vehicle, 2);
      await Delay(300);
      SetVehicleLights(playerInfo.vehicle, 0);
      await Delay(300);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-09-28
      • 1970-01-01
      • 2015-03-23
      • 2011-11-02
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      相关资源
      最近更新 更多