Функция вызывается более одного раза
Я создаю игру, похожую на Pacman. Игровое поле хранится в массиве с именем "testLevel". Здесь я пытаюсь закодировать призраков и заставить их двигаться на одну клетку в 5 секунд. Что происходит, так это то, что каждые 5 секунд вызывается функция-призрак, но программа запускается так быстро, что функция вызывается несколько раз в течение этой секунды, когда я хочу, чтобы она запускалась один раз, а затем не запускалась снова в течение следующих 5 секунд. Как я могу исправить эту проблему. Спасибо!
var testLevel = [[0,0,0,0,0,0],[0,1,0,1,1,0],[0,0,1,0,1,0],[0,0,1,0,1,0],[0,1,4,1,1,0],[0,0,0,0,0,0]];
function draw() {
background(255);
var sec = second();
if (sec % 5 == 0) {
ghost();
}
}
function ghost(){
for(b=1; b <7 ;b++){// column
for (a=5; a>-1; a--){// row
if (testLevel[a][b] == 4 && testLevel [a-1][b] !== 0){
c = a;
d = b;
printBoard();
}
}
}
testLevel[c][d] =1;
testLevel[c-1][d] = 4;
}
2 ответа
Мне кажется, что вы хотите использовать какую-то функцию синхронизации,
setTimeout(function, milliseconds)
--- Выполняет функцию после ожидания указанного количества миллисекунд.
или жеsetInterval(function, milliseconds)
--- То же, что setTimeout(), но непрерывно повторяет выполнение функции.
(С http://www.w3schools.com/js/js_timing.asp)
В этом случае, setInterval(ghost, 5000)
в draw()
должен сделать свое дело.
Вместо зацикливания для определения 5 секунд используйте setInterval:
var testLevel = [[0,0,0,0,0,0],[0,1,0,1,1,0],[0,0,1,0,1,0],[0,0,1,0,1,0],[0,1,4,1,1,0],[0,0,0,0,0,0]];
function draw() {
background(255);
var interval = setInterval(ghost, 5000)
function ghost(){
for(b=1; b <7 ;b++){// column
for (a=5; a>-1; a--){// row
if (testLevel[a][b] == 4 && testLevel [a-1][b] !== 0){
c = a;
d = b;
printBoard();
}
}
}
testLevel[c][d] =1;
testLevel[c-1][d] = 4;
}
Примечание. Вы можете использовать clearInterval(интервал), чтобы остановить процесс.