为了账号安全,请及时绑定邮箱和手机立即绑定

atan() 返回 Nan

atan() 返回 Nan

沧海一幻觉 2021-09-30 15:29:00
我正在用 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);}我是这种语言的新手,我错过了什么吗?
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

还有一种“聪明”的方法可以通过利用 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);

分享


查看完整回答
反对 回复 2021-09-30
  • 1 回答
  • 0 关注
  • 437 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信