需求:

模拟球形的脉冲运动

小球的构造函数如下:

// 圆球的构造函数
function Ball(radius, color) {
    if(radius === undefined) { radius = 40; }
    if(color === undefined) { color = "#ff0000"; }
    this.x = 0;
    this.y = 0;
    this.radius = radius;
    this.rotation = 0;
    this.scaleX = 1;
    this.scaleY = 1;
    this.color = color;
    this.lineWidth = 1;
}
Ball.prototype.draw = function(context) {
    context.save();
    context.translate(this.x, this.y);
    context.rotate(this.rotation);
    context.scale(this.scaleX, this.scaleY);
    context.lineWidth = this.lineWidth;
    context.fillStyle = this.color;
    context.beginPath();
    context.arc(0, 0, this.radius, 0, Math.PI * 2, true);
    context.closePath();
    context.fill();
    if(this.lineWidth > 0) {
        context.stroke();
    }
    context.restore();
}

二. 思路分析:

使用正弦值改变球形的比例,即可制造出脉冲效果。

如下:

<canvas id="canvas" width="200" height="200" style="background: #ccc;"></canvas>

var canvas = document.getElementById("canvas"),
    context = canvas.getContext("2d"),
    ball = new Ball(),
    angle = 5,
    centerScale = 1,
    range = 0.5,
    speed = 0.05;

    ball.x = canvas.height / 2;
    ball.y = canvas.height / 2;
    ball.lineWidth = 0;

(function drawFrame() {
    window.requestAnimationFrame(drawFrame, canvas);
    context.clearRect(0, 0, canvas.width, canvas.height);
    ball.scaleX = ball.scaleY = centerScale + Math.sin(angle) * range;
    angle += speed;
    ball.draw(context);
})();

演示如下:http://codepen.io/dengzhirong/pen/PzgygG

本文作者:子匠_Zijor,转载请注明出处:http://www.dengzhr.com/js/959