Есть ли в MakeCode JS цикл типа «повторение [функция] до [свойство = истина]]»?

Я делаю игру в Microsoft MakeCode Arcade для школьного проекта, и я хотел знать, существует ли цикл типа «повторение [функция] до [свойство = истина]», как в Luau. Я хотел использовать это, чтобы игра ждала, пока мой спрайт игрока не достигнет определенной координаты, чтобы запустить некоторый код. Я придумал, как это сделать по-другому, но я хотел знать об этом только для справок в будущем.

Если кому-то интересно, это то, что я использую альтернативный способ.

      game.onUpdateInterval(100, function () {
    if (level == 1) {
        if (myPlayer.x == 950 && myPlayer.y == 140) {
            myPlayer.y = 100
            myPlayer.x = 10
            if (game.ask("Does " + level_1 + " + " + level1_2 + " = " + level1CorrectAns + "?")) {
                console.log("Level 1 Completed successfully")
                level += 1
                LevelChange()
            } else {
                game.over(false)
            }
        }
    }
})

1 ответ

Вы можете использовать цикл или цикл

За while цикл, следующий код будет работать, пока выполняется условие.

      let x = 0

while (x < 3) {
  x++
}

console.log(x) // print 3

За do...whileцикл, следующий код будет продолжать работать, пока выполняется условие. И этот цикл будет выполнен хотя бы один раз.

      let result = '';
let x = 0;

do {
  x = x + 1;
  result = result + x;
} while (x < 5);

console.log(result); // print "12345"

Возвращаясь к вашему примеру, я считаю, что вы запускаете цикл каждые 100ms (на основе первого аргумента вашего game.onUpdateInterval.

Вы можете легко сделать это, добавив timer функцию и оберните этот цикл как асинхронную функцию.

      const timer = ms => new Promise(res => setTimeout(res, ms))

async function updateInterval() {
  while () {
  // Your logic here
  await timer(100) // You can change the timeout to your desired ms
  }
}

updateInterval();

Хотя я не уверен на 100% в функциональности вашего текущего обходного пути, но это моя интерпретация (надеюсь, что это сработает)

      const timer = (ms) => new Promise((res) => setTimeout(res, ms));

async function updateInterval() {
  let state = true; // This is just a condition if the loop should continue
  while (state) {
    if (level == 1) {
      if (myPlayer.x == 950 && myPlayer.y == 140) {
        myPlayer.y = 100;
        myPlayer.x = 10;
        if (
          game.ask(
            'Does ' +
              level_1 +
              ' + ' +
              level1_2 +
              ' = ' +
              level1CorrectAns +
              '?'
          )
        ) {
          console.log('Level 1 Completed successfully');
          level += 1;
          LevelChange();
          state = false; // Update the state to false, so it will exit the while loop
        } else {
          game.over(false);
        }
      }
    }
    await timer(100); // You can change the timeout to your desired ms
  }
}

updateInterval();
Другие вопросы по тегам