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

dxxの変位です。

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 に答える