Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

540
Views
js setTimeout() no funciona y me da un error de recursión

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!

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

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 .

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!