4

我对 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++;
}

我确实评论了令我感到困惑的行。任何人都请让我知道这个功能对于这个动画有多重要。

小提琴

4

2 回答 2

14

dx是 x 上的位移。

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

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

可以写成

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

x基本上,如果球已经很慢,这条线和下面的线会停止球。

于 2013-02-07T11:38:44.050 回答
3

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

这个计算可以永远持续下去,但会产生锯齿状的结果,因为与 dx 相比,浮点精度误差会成为一个很大的因素,所以当球已经很慢时最好停止弹跳,这就是使用 Math-abs 的测试的目的。用英语你可以阅读

if (Math.abs(dx) < 0.01) 

作为if the speed of the ball in the x direction is less than 0.01 then stop the ball

于 2013-02-07T11:44:50.557 回答