Tengo una aplicación (juego) ejecutándose en javascript. Solía codificar juegos Flash (y también C ++ y Java hace años), así que estoy usando el lienzo para ejecutar el juego en javascript. Ha habido muchas cosas "divertidas" que he aprendido sobre cómo javascript funciona "de manera diferente", pero me he encontrado con un problema que no puedo entender y no puedo encontrar ninguna razón en línea.
Javascript ejecutará una función y luego (al parecer) decidirá arbitrariamente cambiar la entrada a 0. Digo arbitrariamente porque estas funciones funcionaron perfectamente durante el último mes, y solo hoy decidieron actuar de manera extraña. La función se activa correctamente, luego cambia instantáneamente la entrada que la activó a 0 y ejecuta todas las líneas de código en la función. No entiendo cómo sucede esto y nada de lo que cambio en mi código afecta el resultado. La única solución que encontré es eliminar la función y escribir una nueva usando un estilo diferente... Este enfoque no puede ser la mejor manera. ¿Algunas ideas? Además, esta es mi primera pregunta, así que no sé el formato correcto para preguntar. Mi código tiene miles de líneas y la función a la que se llama está aislada, por lo que no debería importar.
frameEarring, policeAmount, stoleJewelry son variables públicas si eso importa. la función se activa porque earringFrame > 0, pero... howCanThisLogicallyEqualZero = 0, getValueOfItem(howCanThisLogicallyEqualZero) = 0, policeAmount += 0, setDanger(50) = 50.
este es el codigo
if (frameEarring > 0) { let howCanThisLogicallyEqualZero = frameEarring; getValueOfItem(howCanThisLogicallyEqualZero); policeAmount += howCanThisLogicallyEqualZero * 10; frameEarring = 0, setDanger(50); stoleJewelry = true; //adds message to phone }y aquí hay una imagen del juego ejecutándose en Chrome96 y mostrándolo
Eso debería ser imposible. El depurador de Chrome puede confundirse aquí. A veces, las herramientas de desarrollo pueden hacer cosas extrañas, especialmente cuando se trata de transpilación y mapas de origen.
Agregue algo de registro como console.log('frameEarring before check', frameEarring) antes de la verificación condicional, y un console.log('frameEarring is greater than zero', frameEarring) dentro de la rama condicional. Apuesto a que verás los valores que esperas entonces.
Sin un ejemplo reproducible o una comprensión de su proceso de compilación, no puedo decirle por qué su depurador está haciendo exactamente eso.
Por último, evitaría el operador de coma en:
frameEarring = 0, setDanger(50);si yo fuera tú. Probablemente quisiste tener un punto y coma allí de todos modos, lo que tendría más sentido.