1

我正在 Microsoft MakeCode Arcade 中为一个学校项目制作游戏,我想知道是否有像 Luau 中那样的“重复 [function] 直到 [property = true]”类型的循环。我想使用它,以便游戏等到我的玩家精灵处于某个坐标时才运行一些代码。我想出了一种以不同方式做到这一点的方法,但我想知道以供将来参考。

如果有人想知道,这就是我正在使用的替代方式。

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)
            }
        }
    }
})
4

1 回答 1

1

您可以使用while循环或do...while循环

Forwhile循环,只要条件为真,下面的代码就会继续运行。

let x = 0

while (x < 3) {
  x++
}

console.log(x) // print 3

Fordo...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();
于 2021-03-14T08:35:54.290 回答