我试图使粒子朝着画布点击的位置移动,但公式返回NaN。为什么会这样,我该如何解决这个问题?
function Shuriken(mouseX, mouseY) {
this.rot = 0;
this.vel = 2;
this.angle = 0;
this.x = player.x || WIDTH / 2;
this.y = player.y || HEIGHT / 2;
this.mouseX = mouseX || WIDTH /2;
this.mouseY = mouseY || HEIGHT /2
this.width = shurikenImg.width;
this.height = shurikenImg.height;
}
Shuriken.prototype.move = function() {
this.angle = Math.atan2(this.mouseY, this.x) * (180 / Math.PI);
this.x += this.vel * Math.cos(this.angle);
this.y += this.vel * Math.sin(this.angle);
}
答案 0 :(得分:2)
您将angle
从弧度转换为度数。更好调试(因为学位仍然在学校教授)但是唉,下一行中的sin
和cos
期望他们的参数再次以弧度为单位。当然,这些功能还应该起作用;但你得到的价值不再是你所期望的。
this.vel
在jsfiddle中未定义。这很可能导致观察NaN
。
这是一个错误的计算:
this.x = this.vel * Math.cos(this.angle);
this.y = this.vel * Math.sin(this.angle);
你不希望以这种方式计算的x和y位置。从x / y坐标添加或减去(调整后的)速度。