简体   繁体   中英

Function is called more than once

I am creating a game similar to Pacman. The game board is held in an array called "testLevel." Here, I am trying to code the ghosts and make them move one square per 5 second. What happens is that every 5 seconds the ghost function will be called, but the program runs so fast that the function gets called multiple times within that second when I only want it to run once then not run again until another 5 seconds. How can I fix this problem. Thanks!

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;
       }

It sounds to me like you want to use some sort of timing function, either

setTimeout(function, milliseconds)
---Executes a function, after waiting a specified number of milliseconds.
or
setInterval(function, milliseconds)
---Same as setTimeout(), but repeats the execution of the function continuously.

(From http://www.w3schools.com/js/js_timing.asp )

In this case, setInterval(ghost, 5000) in draw() should do the trick.

Instead of looping to determine 5 seconds, use 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;
   }

Note: You can use clearInterval(interval) to stop the process.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM