JavaScript中的Math.abs函数

5

我对math.abs()函数感到困惑。我在互联网上进行了研究,但没有找到它与这个弹跳球动画之间的任何关系。我想知道它是如何工作的,以及在使用math.abs()函数后为什么球可以平稳地弹跳?

function bounce() {
    if (x + dx > 293 || x + dx < 0) {
        dx = -dx;
    }
    if (y >= 290) {
        y = 290;
    }
    if (y + dy > 290 || y + dy < 0) {
        dx *= 0.99;
        dy = -dy;
    }
    //if (Math.abs(dx) < 0.01) {
       // dx = 0;
    }
    dy++;
}

我已经注释了让我感到困惑的行。请问这个函数对于这个动画有多重要。

Fiddle


你是在问这个函数确切的作用是什么?还是为什么要使用它? - Tom Walters
@Tom Walters:这个函数是如何工作的? - Manoz
2个回答

15

dx 是沿 x 轴的位移。

Math.abs(dx) 是沿 x 轴的绝对速度,即没有符号的值,始终为正数或零。

if (Math.abs(dx) < 0.01) {

本来可以写成

if (dx>-0.01 && dx < 0.01) {

基本上,这一行和下一行会在x上阻止球的移动,如果它已经很慢了。


3

每当满足最后一个条件(if (y + dy > 290 || y + dy < 0) {)时,dx会减少1%。

这个计算可以一直进行下去,但会产生不规则的结果,因为与dx相比,浮点精度误差将成为一个重要因素。因此,最好在球已经变慢时停止弹跳,这就是使用Math-abs测试的原因。用英语来说:

if (Math.abs(dx) < 0.01) 

如果球在x轴方向的速度小于0.01,则停止球


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接