javascript - atan() 返回楠
问题描述
我正在用 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);
}
我是这种语言的新手,我错过了什么吗?
解决方案
通过利用 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);
推荐阅读
- javascript - 将表单锁定在html css中后更改边框
- sql - “不一致的数据类型:预期的 %s 得到了 %s”
- javascript - 在反应本机中使用 ref 调用 child 中的函数
- mysql - Does MySQL JDBC version have to match the server
- c# - How to increment WinForms progress bar based on the competition of functions?
- java - Java | acessing object variables from inside constructor?
- r - 当“which”函数找不到值时怎么办?
- python - 每当我单击 APP GUI 中的任何位置时,打印困难(“ok”)
- python - 格式化&符号会添加意外字符
- drupal - 我可以在 Drupal 8 Webform Submissions 上重新排序导出 CSV 的列吗?