码迷,mamicode.com
首页 > 其他好文 > 详细

动画原理——摩擦力

时间:2015-01-28 12:59:37      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

书籍名称:HTML5-Animation-with-JavaScript

书籍源码:https://github.com/lamberta/html5-animation1

1.有摩擦力的情况

摩擦力在物体发生相对运动时产生,是运动方向的反向加速度。

代码表示意思如下

  if (speed > friction) {
          speed -= friction;
        } else {
          speed = 0;
        }

06-friction-1.html

技术分享
<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Friction 1</title>
    <link rel="stylesheet" href="../include/style.css">
  </head>
  <body>
    <header>
      Example from <a href="http://amzn.com/1430236655?tag=html5anim-20"><em>Foundation HTML5 Animation with JavaScript</em></a>
    </header>
    <canvas id="canvas" width="400" height="400"></canvas>

    <script src="../include/utils.js"></script>
    <script src="./classes/ball.js"></script>
    <script>
    window.onload = function () {
      var canvas = document.getElementById(‘canvas‘),
          context = canvas.getContext(‘2d‘),
          ball = new Ball(),
          vx = Math.random() * 10 - 5,
          vy = Math.random() * 10 - 5,
          friction = 0.1;

      ball.x = canvas.width / 2;
      ball.y = canvas.height / 2;

      (function drawFrame () {
        window.requestAnimationFrame(drawFrame, canvas);
        context.clearRect(0, 0, canvas.width, canvas.height);

        var speed = Math.sqrt(vx * vx + vy * vy),
            angle = Math.atan2(vy, vx);

        if (speed > friction) {
          speed -= friction;
        } else {
          speed = 0;
        }
        vx = Math.cos(angle) * speed;
        vy = Math.sin(angle) * speed;
        ball.x += vx;
        ball.y += vy;
        ball.draw(context);
      }());
    };
    </script>
  </body>
</html>
View Code

2.简单的方法

摩擦力实际就是速度逐渐变相,在动画程序中,我们可以简单的使每一帧的速度都变小。类似。

vx *= 0.9;
vy *= 0.9;

06-friction-2.html

技术分享
<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Friction 2</title>
    <link rel="stylesheet" href="../include/style.css">
  </head>
  <body>
    <header>
      Example from <a href="http://amzn.com/1430236655?tag=html5anim-20"><em>Foundation HTML5 Animation with JavaScript</em></a>
    </header>
    <canvas id="canvas" width="400" height="400"></canvas>

    <script src="../include/utils.js"></script>
    <script src="./classes/ball.js"></script>
    <script>
    window.onload = function () {
      var canvas = document.getElementById(‘canvas‘),
          context = canvas.getContext(‘2d‘),
          ball = new Ball(),
          vx = Math.random() * 10 - 5,
          vy = Math.random() * 10 - 5,
          friction = 0.95;

      ball.x = canvas.width / 2;
      ball.y = canvas.height / 2;

      (function drawFrame () {
        window.requestAnimationFrame(drawFrame, canvas);
        context.clearRect(0, 0, canvas.width, canvas.height);

        vx *= friction;
        vy *= friction;
        ball.x += vx;
        ball.y += vy;
        ball.draw(context);
      }());
    };
    </script>
  </body>
</html>
View Code

 

动画原理——摩擦力

标签:

原文地址:http://www.cnblogs.com/winderby/p/4255448.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!