为什么我得到整数的NaN?

时间:2019-10-24 03:14:26

标签: javascript processing p5.js

这是我的代码:

    createCanvas(windowWidth, windowHeight);
    noStroke();
}

var momentum = [0, 0]; //x and y speed
var pos = [650, 300]; //player x and y
var enemiesX = []; //enemies x's
var enemiesY = []; //enemies y's

function draw() {
    background(200);
    momentum[0] = (pos[0] - mouseX) / 5;
    pos[0] =+ momentum;
    fill(115);
    ellipse(pos[0], pos[1], 30, 30);
    text(pos[0] + ", " + pos[1], 20, 20);
}

我正在使用数组来压缩配对的相似x和y。我正在测试text函数,并且意识到 每个 数组的第一个是NaN。我知道这个:

    momentum[0] = (pos[0] - mouseX) / 5;
    pos[0] =+ momentum;

但是有什么问题吗?

此外,在人们用带有重复标记的垃圾邮件之前,这种简单性意味着没有其他这种性质的问题有相关的答案。

3 个答案:

答案 0 :(得分:1)

mouseX在哪里定义?它是undefined,任何数字加上undefined将等于零。

此外,=++=不同,并且会引起进一步的问题

答案 1 :(得分:0)

使用parsetInt避免使用NaN,并进一步检查NaN

   createCanvas(windowWidth, windowHeight);
    noStroke();
}

var momentum = [0, 0]; //x and y speed
var pos = [650, 300]; //player x and y
var enemiesX = []; //enemies x's
var enemiesY = []; //enemies y's

function draw() {
    background(200);
    mouseX = parseInt(mouseX);
    if(mouseX === NaN){
        alert('Not a number exception');
    }
    else{
        momentum[0] = (pos[0] - mouseX) / 5;
        pos[0] =+ momentum;
        fill(115);
        ellipse(pos[0], pos[1], 30, 30);
        text(pos[0] + ", " + pos[1], 20, 20);
    }
}

答案 2 :(得分:0)

您的代码有两个问题。首先是您使用的是 =+ 而不是 +=。第二个是 momentum 是一个数组,而不是一个数字。这就是您的代码在您突出显示的两行中正在执行的操作:

  • 评估(pos[0] - mouseX) / 5
  • 将该值保存在 momentum 数组的 0 位置。
  • 评估+momentum
  • 将该值保存在 pos 数组的 0 位置。

在第三个要点中,+momentum 的计算结果为 NaN。然后将该值保存在 pos 数组中。两行中的第一行没问题。我认为您想要做的是将 momentum[0] 添加到 pos[0],可以这样做:

  pos[0] += momentum[0];

我不确定你的意图,但我的猜测是你想让圆圈朝向光标,而不是远离它。那样的话,你的动量符号就错了,应该是这样的:

  momentum[0] = (mouseX - pos[0]) / 5;
  pos[0] += momentum[0];