2014-10-15 3 views
1

Мне нужно найти скорость объекта в игре. Игра выполнена в HTML5 с jquery и jquery.box2d. Для этого можно использовать следующие методы:Вычислить скорость из вектора скорости с помощью box2d GetLinearVelocity();

GetLinearVelocity().x; 
GetLinearVelocity().y; 

Я затем пытается вычислить скорость от этого куска кода, но получить некоторые значения, которые не имеют смысла, когда я console.log его. Это мой код:

var heroVelX = game.currentHero.GetLinearVelocity().x; 
var heroVelY = game.currentHero.GetLinearVelocity().y; 

var speed = Math.sqrt(heroVelX^2 + heroVelY^2); 
console.log(speed); 

Некоторые из значений console.log являются числами, но большинство из них являются NaN (Not-A-Number), который меня смущает? Может ли кто-нибудь помочь мне решить эту проблему?

Цель, которую я хочу достичь, - увидеть, когда скорость (объекта .currenHero) опускается ниже определенного значения, поэтому я могу выпустить новое состояние в игре.

ответ

1

Ваша проблема заключается в том, что вы используете неправильный оператор (Bitwise XOR) для выполнения квадрата - see here.

Что вам нужно сделать, это:

var speed = Math.sqrt(Math.pow(heroVelX, 2) + Math.pow(heroVelY, 2)); 
+0

правильный ответ, но 'Math.pow (foo, 2)' чрезмерно по сравнению с тем, что просто писал 'foo * foo'. – Alnitak

+0

@ Алнитак, какой бы ни был ваш стиль, это самый прямой путь в JS. – ydaniv

+0

Я вижу вашу точку с 'foo * foo' более простой, просто пытаясь получить положительное значение. –

-2

Единственный раз, когда функция квадратного корня должна возвращать NaN, это когда значение квадратного корня отрицательно. Способ протестировать, если это проблема, заключается в том, чтобы попытаться возвести в квадрат значения в другой строке кода до того, как их укоренить.

heroVelX = (heroVelX) * (heroVelX) 

Другой способ потенциально пролить свет на эту проблему можно было бы добавить утверждения журнала распечатывания значения скорости и скорости в квадрате до того квадратного корня.

+0

Я получаю отрицательные значения, если я войти в вход, прежде чем я Math.Sqrt. У jqeury есть способ преобразовать значения tve только в положительные? –

+0

Принимая абсолютное значение, возвращается положительное число с одинаковой величиной. So Math.abs (-10) = 10 – George

+0

Спасибо, Джордж. Я попробую. –

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