我在畫布上畫了這棵樹,現在我想爲它製作動畫並使它看起來像是在增長。我是一個有動畫的初學者,所以我會很高興爲任何輸入和想法!此外,樹應該每次都有不同的增長,如果可能的話,樹看起來不一樣。 謝謝!如何在HTML5畫布中動畫樹
<!DOCTYPE html>
<html lang="en">
<head>
<title>tree</title>
</head>
<body onload="init();">
<canvas id="canvas" width="1200" height="600" ></canvas>
<script type="text/javascript" >
init = function() {
var x1 = 400;
var y1 = 300;
var x2 = 400;
var y2 = 200;
var angle = 0.1 * Math.PI;
var depth = 6;
drawTree(x1, y1, x2, y2, angle, depth);
}
drawTree = function(x1, y1, x2, y2, angle, depth){
var context = document.getElementById('canvas').getContext('2d');
context.strokeStyle = 'rgb(0, 0, 0)';
context.lineWidth = depth;
context.beginPath();
context.moveTo(x1, y1);
context.lineTo(x2, y2);
context.stroke();
if(depth > 0){
var x = x2 - x1;
var y = y2 - y1;
var scale = 0.5 + Math.random() * 0.5;
x *= scale;
y *= scale;
var xLeft = x * Math.cos(-angle) - y * Math.sin(-angle);
var yLeft = x * Math.sin(-angle) + y * Math.cos(-angle);
var xRight = x * Math.cos(+angle) - y * Math.sin(+angle);
var yRight = x * Math.sin(+angle) + y * Math.cos(+angle);
xLeft += x2;
yLeft += y2;
xRight += x2;
yRight += y2;
drawTree(x2, y2, xLeft, yLeft, angle, depth - 1);
drawTree(x2, y2, xRight, yRight, angle, depth - 1);
}
}
</script>
</body>
</html>
http://d3js.org/ – mccainz 2014-12-03 17:49:34
一個超級幼稚的方法是把你的畫叫成[' setTimeout()'](http://jsfiddle.net/brbcoding/tkuwc5zg/)(但是這在慢速下看起來很糟糕)。你可能想要抓住每個'分支'的開始和結束點,並在開始點和結束點內的中間點重繪畫布(使用'requestAnimationFrame'或類似方法在一些繪製循環內部)。 – brbcoding 2014-12-03 17:50:41
這就是我的意思 - http://jsfiddle.net/brbcoding/2ym5710m/ – brbcoding 2014-12-03 18:05:49