Javascript 变量不通过 ocanvas 函数和 for 循环

Javascript Variable not passing through ocanvas function and for loop

我有一个变量没有通过 ocanvas 函数传递的问题。看起来变量在函数内部发生变化,但没有在函数外部发生变化。这是我的代码:

                sonicSpeed2 = 0;
                sonicState2 = 0;

                canvas.bind("keypress", function () {
                    var keys = canvas.keyboard.getKeysDown();
                    var x;

                    sonicSpeed2 = 4;

                    for (x = keys.length; x > 0; x--) {
                        if (keys[x-1] == 16 && keys.length > 1) {
                            sonicSpeed2 = 15;
                            sonicState2 = 2;
                        }
                        if (keys[x-1] == 65) {
                            sonicState2 = 1;
                            sonicDirection2a = false;
                        }
                        if (keys[x-1] == 68) {
                            sonicState2 = 1;
                            sonicDirection2a = true;
                        }
                        if (keys[x-1] == 87) {
                            sonicState2 = 1;
                            sonicDirection2b = false;
                        }
                        if (keys[x-1] == 83) {
                            sonicState2 = 1;
                            sonicDirection2b = true;
                        }
                    }
                });

                if (sonicDirection2a == false) {
                    nullObject2.x -= sonicSpeed2;
                }
                else if (sonicDirection2a == true) {
                    nullObject2.x += sonicSpeed2;
                }

                if (sonicDirection2b == false) {
                    nullObject2.y -= sonicSpeed2;
                }
                else if (sonicDirection2b == true) {
                    nullObject2.y += sonicSpeed2;
                }

事件处理程序在未来不确定的时间执行。 绑定事件处理器,也就是你正在做的canvas.bind("keypress", ...)没有执行的功能。 after 立即执行的内容。

如果你想做一些事情来响应事件,它必须在事件处理程序中或从事件处理程序中执行。

参考Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference