动画原理——摩擦力

书籍名称: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>

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>

时间: 2024-08-30 02:47:12

动画原理——摩擦力的相关文章

JS 实现无缝滚动动画原理(初学者入)

这段时间在教培训班的学生使用原生javascript实现无缝滚动的动画案例,做了这个原理演示的动画,分享给自学JS的朋友!博主希望对你们有帮助! 在讲解之前先看一下demo: demo:https://224137748.github.io/JS_warehouse/lunbo/domo.HTML源码:https://github.com/224137748/JS_warehouse/blob/master/lunbo/domo.HTML ps: 上面和下面的滚动进度是一致的,上面红色框是为了演

SVG描边动画原理

SVG描边动画原理其实很简单,主要利用以下两个属性 stroke-dasharray 制作虚线,使得黑白相间, stroke-dashoffset 使得虚线向开头偏移,这里的1500不精确,是我随便取的,下文介绍通过JS获取长度. 动画就是减少虚线偏移,那么实线就会慢慢漏出来了 JS获取长度 var path = document.querySelector('path'); var length = path.getTotalLength(); 然后改变path.style.strokeDas

动画原理

动画原理 动画的基本原理 : 让盒子的 offsetLeft   +  步长 原理 匀速运动封装函数 1 function animate(obj,target){ 2 var speed = obj.offsetLeft < target ? 5 : -5; // 用来判断 应该 + 还是 - 3 obj.timer = setInterval(function() { 4 var result = target - obj.offsetLeft; // 因为他们的差值不会超过5 5 obj.

从Sprite3D理解3D骨骼动画原理

为了能够更好的使用cocos为我们提供的Sprite3D,我和大家分享一下Sprite3D中关于骨骼动画原理的部分,本文使用cocos2d-x 3.2版本,这是cocos首次出现3D骨骼动画的版本,相对与本文写出来时候最新的3.5版本,由于没有其他比如灯光等功能,3D骨骼动画模块读起来要更加的清晰.如果文章有纰漏或者错误的地方,也请大家指教. 目前引擎支持3种动画格式,分别是.obj,.c3b,.c3t,由于.obj没有骨骼,.c3b是二进制,而.c3t是json格式,所以本文就用官方test中

Unity3D 骨骼动画原理学习笔记

最近研究了一下游戏中模型的骨骼动画的原理,做一个学习笔记,便于大家共同学习探讨. ps:最近改bug改的要死要活,博客写的吭哧吭哧的~ 首先列出学习参考的前人的文章,本文较多的参考了其中的表述: 1.骨骼动画详解 :http://blog.csdn.net/ccx1234/article/details/6641944,不过这篇文章的原文已经被csdn封了:D,可以看看对应的转载的文章也行 2.OpenGL10-骨骼动画原理篇:http://www.cnblogs.com/zhanglitong

骨骼动画原理(转载)

视频教程请关注 http://edu.csdn.net/lecturer/lecturer_detail?lecturer_id=440 本例程展示如何建立骨骼动画,有些人叫蒙皮动画 定义如下: 当前有两种模型动画的方式:顶点动画和骨骼动画.顶点动画中,每帧动画其实 就是模型特定姿态的一个“快照”.通过在帧之间插值的方法,引擎可以得到平滑 的动画效果.在骨骼动画中,模型具有互相连接的“骨骼”组成的骨架结构,通过 改变骨骼的朝向和位置来为模型生成动画. 骨骼动画比顶点动画要求更高的处理器性能,但同

android动画之从源码角度分析动画原理

以前一直不懂android的动画机制,android系统是如何实现动画的,所以导致只会做一些android系统已经为我们封装好的动画即:AlphaAnimation, TranslateAnimation, ScaleAnimation,RotateAnimation以及这些动画混合起来使用,其实有android系统为我们提供的这几种动画是可以满足我们平时的基本需求了,但是要做一些高级的动画就是不可能的,比如3D动画,所以就看了一下android系统所带动画的源码,做了一些总结,下面就是我对动画

CSS动画原理及硬件加速

一.图层 图层即层叠上下文,具体概念和应用大家可以看我之前转自张鑫旭大神博客的<CSS层叠上下文和层叠顺序>,这里我们简单复习一下产生层叠上下文的原因. 1.根层叠上下文 指的是页面根元素,也就是滚动条的默认的始作俑者<html>元素.这就是为什么,绝对定位元素在left/top等值定位的时候,如果没有其他定位元素限制,会相对浏览器窗口定位的原因. 2.定位元素与传统层叠上下文 对于包含有position:relative/position:absolute的定位元素,以及Fire

扫地机器人动画原理

使用jQuery制作一个扫地机器人动画.动画效果是画面的左边是一些垃圾,然后画面左右是一个扫地机器人,扫地机器人从右边移动到左边,然后被扫过的垃圾就会被吸到扫地机器人里面而消失掉. 理论原理:通过判断垃圾元素的坐标与扫地机器人的坐标的关系来判断垃圾是否被扫地机器人扫过,然后被扫过的垃圾就要被隐藏掉. 实现原理:使用jQuery的animate()函数进行小幅度的移动,然后使用animate()的callback回调函数,每移动一次就判断一次垃圾是否已经被扫地机器人扫过,扫过的垃圾就要被隐藏.然后