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

4.10 绘制一个简单的logo并随机定位、旋转、缩放

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

按照以下步骤,绘制5个随机定位、随机旋转、随机缩放的logo:

1. 定义drawLogo()函数,该函数通过输出文本,并在文本下面绘制两条波浪线,来绘制一个简单的logo:

function drawLogo(context){
  //绘制文本“Hello Logo!”
  context.beginPath();
  context.font  = "10pt Calibri";
  context.textAlign  = "center"; 
  context.textBaseline  = "middle";
  context.fillStyle  = "blue";
  context.fillText("Hello Logo!",  0,  0); 
  context.closePath();
  //定义两条波浪线的样式
  context.lineWidth  =  2;
  context.strokeStyle = "blue";
  //绘制上面那条波浪线
  context.beginPath();
  context.moveTo(-30,  10);
  context.bezierCurveTo(-5,  5,  5,  15,  30,  10); 
  context.stroke();
  //绘制下面那条波浪线
  context.beginPath();
  context.moveTo(-30,  15);
  context.bezierCurveTo(-5,  10,  5,  20,  30,  15);
  context.stroke();
}

2. 定义getRandomX()函数,该函数返回一个0到画布的宽度的随机数X:

function getRandomX(canvas){
  return Math.round(Math.random()  * canvas.width);
}

3. 定义getRandomY()函数,该函数返回一个0到画布的高度的随机数Y:

function getRandomY(canvas){
  return Math.round(Math.random()  * canvas.height);
}

4. 定义getRandomSize()函数,该函数返回一个0到5的随机尺寸:

function getRandomSize(){
  return Math.round(Math.random()  *  5);
}

5. 定义getRandomAngle()函数,该函数返回一个0到2π的随机角度:

​function getRandomAngle(){
  return Math.random()  * Math.PI  *  2;
}​

6. 定义画布上下文:

window.onload = function(){
  var canvas  = document.getElementById("myCanvas");
  var context = canvas.getContext("2d");

7. 创建一个循环,该循环绘制5个随机定位、随机旋转、随机缩放的logo:

  //绘制5个被随机变换的logo
  for  (var n  =  0; n  <  5; n++)  {
    context.save();
    //平移到随机位置
    context.translate(getRandomX(canvas), getRandomY(canvas));
    //旋转随机角度
    context.rotate(getRandomAngle());
    //缩放随机尺寸
    var randSize  = getRandomSize();
    context.scale(randSize, randSize);
    //绘制logo
    drawLogo(context);
    context.restore();
  }
};

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

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

工作原理

首先,要绘制我们的简单logo,我们可以创建一个名为drawLogo()的函数,该函数在初始位置输出“Hello Logo!”文本,然后调用bezierCurveTo()方法绘制两条波浪线。

然后,要绘制5个随机定位、随机旋转、随机缩放的logo。我们可以创建几个工具函数,这些工具函数返回用于位置、旋转角度、缩放比例的随机数。再创建一个for循环,该循环的每个迭代都使用save-restore组合来产生状态的作用域,执行三次变换后,再调用drawLogo()方法绘制logo。如果你亲自试验本节的例子,你将看到,每次刷新屏幕,这5个logo的位置、旋转角度、缩放比例都不同。