2014-10-15 8 views
1

게임에서 객체의 속도를 찾아야합니다. 게임은 jquery와 jquery.box2d를 사용하여 HTML5로 만들어졌습니다. 그때 나는이 코드 조각에서 속도를 계산하기 위해 노력하고있어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 나를 혼란하는 (안-A-번호)입니까? 누군가 내가이 문제를 해결하도록 도울 수 있습니까?

달성하고자하는 목표는 속도 (오브젝트 .currenHero)가 특정 값 아래로 떨어지는 시점을 확인하여 게임에서 새로운 상태를 발휘할 수 있도록하는 것입니다.

답변

1

문제는 사용자가 올바르지 않은 연산자 (Bitwise XOR)를 사용하여 square - see here을 사용하고 있다는 것입니다. 당신이해야 할 일은

은 다음과 같습니다

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

정답이지만'Math.pow (foo, 2)'는'foo * foo'를 쓰는 것보다 상황이 너무 비쌉니다. – Alnitak

+0

@Alnitak 귀하의 스타일이 무엇이든간에, 이것은 JS에서 가장 직접적인 방법입니다. – ydaniv

+0

'foo * foo'가 더 간단하고 긍정적 인 값을 얻으려는 당신의 요점을 봅니다. –

-2

평방근 함수가 NaN을 반환해야하는 유일한 시간은 음수 인 경우입니다. 이것이 문제인지 테스트하는 방법은 제곱근을하기 전에 다른 코드 줄에서 값을 제곱 해보십시오.

heroVelX = (heroVelX) * (heroVelX) 

잠재적 로그 문이 속도의 값을 인쇄하고 속도가 광장 응원하기 전에 제곱 추가하는 것입니다 문제에 대한 몇 가지 빛을하는 또 다른 방법.

+0

내가 Math.sqrt을하기 전에 내가 입력을 기록하는 경우 음의 값을 얻는다. jqeury에는 tve 값을 긍정적 인 것으로 변환하는 방법이 있습니까? –

+0

절대 값을 취하면 같은 크기의 양수가 반환됩니다. 그래서 Math.abs (-10) = 10 – George

+0

조지 감사합니다. 나는 그것을 시도 할 것이다. –