Есть ли в 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();