atan() 返回 Nan

我正在用 JavaScript 编写我的第一个项目。据我了解, Math.atan() 返回一个数字(以弧度表示的角度)。但不知何故,它返回了南。


使用console.log(),我检查了所有变量(ry、rx、this.y、this.x),并且都是数字。但对于


console.log(Bullet.q)

我得到“NaN”。


function createBullet(rx, ry){

    let Bullet = kontra.Sprite({

        x: player.x,

        y: player.y,

        v: 4,

        q: Math.atan((ry-this.y)/(rx-this.x)),

       // k: this.v/Math.sqrt((ry-this.y)*(ry-this.y)+(rx-this.x)*(rx-this.x)),

        //dx: (rx-this.x)*this.k,

        dx: Math.cos(this.q)*this.v,

        //dy: (ry-this.y)*this.k,

        dy: Math.sin(this.q)*this.v,


    });


    console.log(ry);

    console.log(Bullet.q);

    console.log(Bullet.dy);


}

我是这种语言的新手,我错过了什么吗?


沧海一幻觉
浏览 442回答 1
1回答

largeQ

还有一种“聪明”的方法可以通过利用 JS 的泄漏赋值并使用额外的顶级 var 来存储您需要的对象字面量之外的属性:function createBullet(rx, ry){    var q,v;    let Bullet = kontra.Sprite({        x: player.x,        y: player.y,        v: v = 4,        q: q= Math.atan((ry-player.y)/(rx-player.x)),        dx: Math.cos(q)*v,        dy: Math.sin(q)*v,    });    console.log(ry);    console.log(Bullet.q);    console.log(Bullet.dy);}也就是说,我真的不喜欢聪明的代码,你可能想在文字之前计算这些属性,以获得更好的可读性。可以内联使用 getter 的方式:var obj = { a: 1, b: 2, get sum() { return this.a+this.b}};alert(obj.sum);分享
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript