#javascript #loops #while-loop #fivem
Вопрос:
Я учусь программировать.
Я сделал следующий сценарий, в котором при выполнении будет включен или выключен режим 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);
}
Комментарии:
1. Если ravemode верен, я бы ожидал, что загорится свет, задержка 300, свет выключится на мгновение или, возможно, вообще не будет виден, а затем свет снова загорится. Так что это будет выглядеть так, как будто свет просто горит.
2. Спасибо, @Джеймс, ты был прав. Я добавил новую задержку после выключения света.
Ответ №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);
}