【发布时间】:2014-08-13 23:04:08
【问题描述】:
所以我正在使用画布 API 制作一个小游戏,而且我对 Javascript 还很陌生。但是,当我努力让角色能够在 360 度全方位射击时,我在下面的代码中遇到了一个错误(这个函数应该返回鼠标位置和玩家位置之间的角度)
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返回数字,请帮忙!
更新:粗心的错误,x1 和 y1 等改变了位置,我忘了实现它,谢谢你的回答
【问题讨论】:
-
你从哪里得到
mouse_x和mouse_y? -
变量没有类型。
ang不一定是数字 - 它最初存储一个数字 (0)...typeof表示它是一个数字。NaN表示ang的最新值(计算)具有确定为不是数字的结果。计算确定它不是数字,因此返回NaN。查看计算 (rad * 180 / Math.PI),我假设rad存在“问题”,以使计算出错 -
rad 可能已经是 NaN
-
在我看来,它很可能不是 rad。您可以将字符串相乘,它们将转换为数字类型。我确实怀疑 x1、x2、y1 或 y2 存在问题。其中之一可能是字符串或已经是 NaN,因为您不能减去字符串。
-
@tomysshadow
rad基于x1、x2、y1或y2,所以这就是ang中的问题计算。不过你是对的 - 问题可能出在较早的计算中(例如opp或adj)。并且你可以减去字符串(它们是由运算符强制完成的操作),只要它们代表数字。
标签: javascript variables return nan typeof