Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

151
Visualizações
No se puede ejecutar un setter en un bucle

Estoy tratando de escribir un guión tipo hero quest.

En el que navegamos por una serie de eventos. O el jugador se mueve o se enfrenta a un enemigo y comienza una pelea.

Así que escribí mi guión. La búsqueda y leer bien de principio a fin.

Entonces, me dije a mí mismo, que antes de ir más lejos iba a hacer una prueba en la que en la primera pelea los puentes de vida del héroe caen a cero para probar la situación del fin del juego.

Así que en la función fightHandle bajo los puntos de vida de mi héroe a cero.

Pero en mi bucle, esto no se tiene en cuenta y los puntos de vida del héroe permanecen constantemente en 10 puntos mientras que durante la misión pasa X a través de la fase de combate.

Hice muchas pruebas, pero no veo donde esta mi error algo se me escapa...

 import React, { useEffect, useState } from "react"; import { character } from "./assets/character/character"; export default function Quest({ quest }) { const [player, setPlayer] = useState(character.player); const startQuest = (quest) => { const nbAction = quest.action.length; let i = 1; const timer = setInterval(() => { let action = quest.action[i]; console.log("Life point", player.life); if (player.life > 0) { if (i === nbAction) { clearInterval(timer); endQuest(); } else { if (action === "move") { console.log("player movement"); } else { eventHandler(action); } } } else { console.log("GAME OVER"); clearInterval(timer); } i++; }, 500); }; const eventHandler = (action) => { console.log(`Interaction with the element: ${action}`); const eventType = character[action].type; if (eventType === "statiqueMonster" || eventType === "monster") { const eventResolution = fightHandle(player, action); if (eventResolution === false) { console.log("GAME OVER"); } } }; const fightHandle = (player, action) => { console.log("!!!!!!!---FIGHT---!!!!!!!"); setPlayer((s) => ({ ...s, life: 0 })); if (player.life === 0) { return false; } }; const endQuest = () => { console.log(player); console.log("fin de la quête", quest.name); }; useEffect(() => { startQuest(quest); }, []); return ( <div> <h1>Quest</h1> </div> ); }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Use useRef en su lugar:

 import React, { useEffect, useState } from "react"; import { character } from "./assets/character/character"; export default function Quest({ quest }) { //const [player, setPlayer] = useState(character.player); const playerRef = useRef(character.player); const startQuest = (quest) => { const nbAction = quest.action.length; let i = 1; const timer = setInterval(() => { let action = quest.action[i]; console.log("Life point", player.life); if (playerRef.current.life > 0) { if (i === nbAction) { clearInterval(timer); endQuest(); } else { if (action === "move") { console.log("player movement"); } else { eventHandler(action); } } } else { console.log("GAME OVER"); clearInterval(timer); } i++; }, 500); }; const eventHandler = (action) => { console.log(`Interaction with the element: ${action}`); const eventType = character[action].type; if (eventType === "statiqueMonster" || eventType === "monster") { const eventResolution = fightHandle(player, action); if (eventResolution === false) { console.log("GAME OVER"); } } }; const fightHandle = (player, action) => { console.log("!!!!!!!---FIGHT---!!!!!!!"); //setPlayer((s) => ({ ...s, life: 0 })); playerRef.current = {...playerRef.current, life: 0}; if (player.life === 0) { return false; } }; const endQuest = () => { console.log(player); console.log("fin de la quête", quest.name); }; useEffect(() => { startQuest(quest); }, []); return ( <div> <h1>Quest</h1> </div> ); }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda