2015-05-16 7 views
-1

У меня проблема с переменной, не проходящей через функцию ocanvas. кажется, что переменная изменяется внутри функции, но не делает ее вне функции. вот мой код:Переменная Javascript, не проходящая через функцию 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; 
       } 

ответ

0

Обработчик событий выполняется в неопределенное время в будущем. Связывание обработчик события, который вы делаете с canvas.bind("keypress", ...), не выполнил эту функцию. Что приходит после, которое выполняется немедленно.

Если вы хотите что-то сделать в ответ на событие, которое должно быть выполнено или выполнено из обработчика событий.

См. Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference для справки.

+0

спасибо за ваш ответ, я получил это работает, помещая \t \t \t \t \t sonicSpeed2 = 0; \t \t \t \t \t sonicState2 = 0; после кода движения. Я считаю, что понимаю, как это работает сейчас, функция ввода клавиатуры будет отображаться последним в цикле, правильно ли? – Jeff

+0

Не уверен, что вы подразумеваете под этим. Я хотел сказать, что инструкции 'if' после обработчика событий выполняются до выполнения обработчика события. То есть 'nullObject2.x - = sonicSpeed2;' никогда не увидит новые значения (которые, как я полагаю, вы хотите). Вы должны были бы также вставлять эти выражения 'if' внутри обработчика. –

Смежные вопросы