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

时间:2015-05-16 01:31:19

标签: javascript scope ocanvas

我遇到了一个没有通过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;
                }

1 个答案:

答案 0 :(得分:0)

事件处理程序将在未来的未确定时间执行。 绑定事件处理程序,您正在使用canvas.bind("keypress", ...)执行该功能。 之后立即执行的内容。

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

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