当前位置: 首页 > 文档资料 > HTML5 Canvas 实战 >

5.2 创建直线运动

优质
小牛编辑
127浏览
2023-12-01

本节,我们创建一个简单的直线运动的动画,来考验一下我们的Animation类。动画的内容是,把一个盒子从画布的左侧移动到右侧。

创建直线运动
图5-2 创建直线运动

操作步骤

按照以下步骤,把一个盒子从画布的一侧移动到另一侧:

1. 链接到Animation类:

<head>
<script src="animation.js"> </script>

2. 实例化一个Animation对象,并获取画布上下文对象:

<script>
window.onload = function(){
  var anim  = new Animation("myCanvas"); 
  var canvas  = anim.getCanvas();
  var context  = anim.getContext();

3. 定义盒子的直线运动速度,并创建一个包含位置和尺寸的box对象:

  var linearSpeed  =  100;  // pixels  / second
  var box  =  {
    x:  0,
    y: canvas.height  /  2  -  25, width:  100,
    height:  50
  };

4. 设置stage()函数,该函数更新盒子的位置、清除画布、绘制盒子:

anim.setStage(function(){
  //更新
  var linearDistEachFrame  = linearSpeed  * this.
  getTimeInterval()  /  1000;
  if  (box.x  < canvas.width  - box.width)  {
    box.x  += linearDistEachFrame;
  }
  else  {
    anim.stop();
  }
  //清除
  this.clear();
  //绘制
  context.beginPath();
  context.fillStyle  = "blue";
  context.fillRect(box.x, box.y, box.width, box.height);
});

5. 启动动画:

  anim.start();
};
</script>
</head>

6. 在HTML文档的body部分嵌入canvas标签:

<body>
<canvas id="myCanvas" width="600" height="250" style="border:1px solid black;">
</canvas>
</body>

工作原理

要创建一个简单的直线运动的动画,我们首先需要实例化一个Animation对象,并得到画布及其上下文对象。其次,我们可以定义盒子的速度,本节我们设置为100像素/秒,并创建盒子对象,包含盒子的位置和尺寸。

现在,盒子已经初始化完成,我们可以定义stage()函数,该函数在动画循环中被调用。在每次循环中,首先计算上一帧和当前帧之间的距离,再把这个距离加到x值上,来更新盒子的位置。当盒子到达画布边缘,我们可以调用stop()函数来停止动画。

最后,当stage()函数定义完成,我们就可以调用start()方法启动动画了。

相关参考

  • 第2章 绘制矩形