2014-06-23 1 views
-1

그래서 저는 캔버스 API를 사용하여 작은 게임을 만들고 있습니다. 그리고 저는 자바 스크립트를 처음 접했습니다. 하지만이 charecter 나는 아래의 코드에서 오류를 건너 왔어요 전체 360도에서 촬영 할 수 만드는 작업을하는 동안 (이 기능은 마우스의 위치와 다른 플레이어의 위치 아무것도 사이의 각도를 반환해야합니다)javascript typeof/NaN confusion

calculateAngle : function(x,y){ 

    var opp = 0; //opposite 
    var adj = 0; //adjecent 
    var rad = 0; //radian 
    var ang = 0; //angle 

    //side lengths 
    var x1 = gfx.player_center_x //the player x position 
    var x2 = mouse_x; //the mouse x position 
    var y1 = gfx.player_center_y; //the player y position 
    var y2 = mouse_y; //the mouse y position 

    //find 2 lengths of the triangle 
    opp = (y2 - y1); 
    adj = (x2 - x1); 

    //find the missing angle between the adjecent and hypotenuse 
    rad = Math.atan2(adj, opp); 
    ang = rad * 180/Math.PI; 

    //-------------------------// 
    console.log(ang); //prints: NaN 
    console.log(typeof ang); //prints: number 
    //------------------------// 

    return ang; 
} 

반환 값 NaN이 반환되면 ang은 숫자입니다! javascript가 변수 ang을 숫자가 아닌 것으로 생각하는 이유는 무엇입니까? 0으로 선언 된 typeof가 숫자를 반환합니다. 도와주세요!

UPDATE : NaN의 특별한 값

+0

어디에서'mouse_x'와'mouse_y'를 가져 옵니까? – Steve

+1

변수에 유형이 없습니다. 'ang'은 꼭 숫자가 아닙니다. 처음에는 숫자 ('0')가 저장됩니다. 'typeof'는 숫자입니다. 'NaN'은'ang'의 가장 최근 값 (계산)이 숫자가 아닌 것으로 결정된 결과를 가짐을 의미합니다. 계산 결과 숫자가 아니므로 NaN을 반환합니다. 계산 ('rad * 180/Math.PI')을 보면, 계산을 잘못하기 위해'rad'에 "problem"이 있다고 가정 할 것입니다. – Ian

+1

rad는 아마도 이미 NaN입니다. – juvian

답변

0

하지만 당신 답변, 감사를 만든 부주의 오류, 요법 X1과 Y1은 ​​위치를 변경하고 나는 그것을 구현하는 것을 잊었다. 내부적으로 숫자이지만, "이 값은 수학적으로 정의되지 않았습니다."라는 특별한 의미가있는 특정 값입니다. 정의되지 않은 숫자 (예 : 0/0)가 나오는 모든 연산은 NaN이되지만 여전히 숫자입니다! 정의 된 번호가 아닙니다.

Math.atan2 (이 y/xInfinity 될 것 "에지의 경우"를 처리하기 때문에 -없는 또 다른 "번호"정의 된 번호)가 NaN를 반환 할 수있는 방식으로 구현 그래서 거의 확실한 것 같다 당신의 NaNopp 및/또는 adj입니다. 이 값을 기록하고 현재 상태를 확인해야합니다.

+0

그리고 opp/adj가 x1, x2, y1 및 y2에서 나오기 때문에 문자 및/또는 마우스의 위치가 계산되는 방식이 가장 중요합니다. 아마도 그는 CSS를 사용하여 캐릭터의 위치를 ​​잡으려고 노력 중이며 문제를 일으켰습니다. 캐릭터의 위치는 DOM의 값에 액세스하는 대신 변수에 저장하는 것이 좋습니다. – tomysshadow