Estoy tratando de codificar ajedrez ya que juego mucho y estoy tratando de usar setTimeout() para mi función de movimiento para los peones. Intento configurarlo con un retraso de 10 ms y luego lo llamo así que estoy usando este código:
function pawnMoveFunc(piece) { console.log(colourToMove, mouse.x, mouse.y); let actualPawnX = piece.x - piece.offset; if (piece.colour == colourToMove) { if (mouse.x != actualPawnX || mouse.y != piece.y) { piece.x = mouse.x + piece.offset; piece.y = mouse.y; drawAfterMove(); } else { if (mouse.x == actualPawnX && mouse.y == piece.y && stopLoop == false) { pawnMoveFunc(piece) } } } else { console.log('wrong colour'); } }Llamo a esta función desde mi función de movimiento en mi clase de peón:
class Pawn{ constructor(colour, x, y) { if (colour == 'white') { this.img = document.getElementById('whitePawn') } else{ if (colour == 'black') { this.img = document.getElementById('blackPawn') } } this.colour = colour; this.offset = 7.5; this.x = x * tileSize + this.offset; this.y = y * tileSize; this.width = 35; this.height = 50; } draw() { ctx.drawImage(this.img, this.x, this.y, this.width, this.height) } move() { if (this.x - this.offset == mouse.x && this.y == mouse.y) { setTimeout(10, pawnMoveFunc(this)); } stopLoop = true; stopLoop = false; } }Llamo a esta función de movimiento desde una función que repite la función de movimiento de cada peón todo el tiempo.
Cuando ejecuto este código e intento mover un peón, aparece un error de recurrencia en la función de movimiento del peón, pero no sé por qué.
¡También agradecería cualquier consejo para mi código!
Hay dos problemas en su código.
El primer problema es que setTimeout toma dos parámetros (en orden): función y luego retraso. Está proporcionando el parámetro de retraso antes del parámetro de función.
El segundo problema es que el parámetro de función debería ser una función. Lo que está haciendo es que ya está llamando a la función en lugar de proporcionar a setTimeout una función para llamar.
Esta es la línea de código actualizada (línea 28 desde la parte superior de su clase Pawn ):
setTimeout(() => pawnMoveFunc(this), 10); Nota: () => crea una función de flecha .