Функция вызывается более одного раза

Я создаю игру, похожую на 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(интервал), чтобы остановить процесс.

Другие вопросы по тегам