Привет всем, мне интересно, возможно ли цитировать через массив координат, чтобы я мог выполнять какое-то действие асинхронно на каждой координате?
Я имею в виду, что у меня есть объект игрока:
var player = {
name: "Example",
x: 21,
y: 20,
go: function(x, y) {
console.log("Walking");
//Obviously heres a walking scripting but too much code
}
}
function goToCordinates(data) {
data.map(function(cord) {
var i = setInterval(() => {
if (!(Math.abs(player.x - cord.x) <= 1 && Math.abs(player.y - cord.y) <= 1)) {
//player.go(cord.x, cord.y);
} else {
clearInterval(i);
//Player on coordinates
}
}, 1000);
});
};
goToCordinates([
{x: 11, y: 21},
{x: 12, y: 11},
{x: 24, y: 26},
]);
Внутри goToCordinates() im проверка с использованием inveral, если мои player.x и player.y находятся в 1 поле от этих координат. Если да, то заканчивается. (Код, который я запустил, явно ошибочен, потому что в goToCordinates есть 3 вывода. В основном я хочу захватить первые x, y, проверить, находится ли игрок на этих кординатах, затем захватить второй (каким-то образом) и заставить его к ho к этим координатам с помощью player.go(x, y) еще раз. И повторите это, пока не сравните последние данные в массиве. Также очень важно, что я автоматически проверю, какая длина массива и сколько "контрольно-пропускные пункты" вынуждают игрока идти.
Анойон может помочь? :/
Обработать очередь как замкнутый цикл. Сохраните текущий индекс и обработайте каждый интервал как итерацию цикла.
function goToCordinates(data) {
var index = 0;
var i = setInterval(() => {
let coord = data[index];
if (!(Math.abs(player.x - coord.x) <= 1 && Math.abs(player.y - coord.y) <= 1)) {
//player.move(coord.x, coord.y);
} else {
if (i < data.length) i++;
else clearInterval(i);
//Player on coordinates
}
}, 1000);
});
};