jquery实现canvas梦幻树生长动画效果代码

代码语言:html

所属分类:动画

代码描述:jquery实现canvas梦幻树生长动画效果代码

代码标签: 梦幻 生长 动画 效果

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">



<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
(function ($) {

	var Vector = function (x, y) {

		this.x = x || 0;

		this.y = y || 0;

	};

	Vector.prototype = {

		add: function (v) {

			this.x += v.x;

			this.y += v.y;

			return this;

		},

		length: function () {

			return Math.sqrt(this.x * this.x + this.y * this.y);

		},

		rotate: function (theta) {

			var x = this.x;

			var y = this.y;

			this.x = Math.cos(theta) * this.x - Math.sin(theta) * this.y;

			this.y = Math.sin(theta) * this.x + Math.cos(theta) * this.y;

			//this.x = Math.cos(theta) * x - Math.sin(theta) * y;

			//this.y = Math.sin(theta) * x + Math.cos(theta) * y;

			return this;

		},

		mult: function (f) {

			this.x *= f;

			this.y *= f;

			return this;

		}

	};



	var Leaf = function (p, r, c, ctx) {

		this.p = p || null;

		this.r = r || 0;

		this.c = c || 'rgba(255,255,255,1.0)';

		this.ctx = ctx;

	}



	Leaf.prototype = {

		render: function () {

			var that = this;

			var ctx = this.ctx;

			var f = Branch.random(1, 2)

			for (var i = 0; i < 5; i++) {

				(function (r) {

					setTimeout(function () {

						ctx.beginPath();

						ctx.fillStyle = that.color;

						ctx.moveTo(that.p.x, that.p.y);

						ctx.arc(that.p.x, that.p.y, r, 0, Branch.circle, true);

						ctx.fill();

					}, r * 60);

				})(i);

			}

		}

	}





	var Branch = function (p, v, r, c, t) {

		this.p = p || null;

		this.v = v || null;

		this.r = r || 0;

		this.length = 0;

		this.generation = 1;

		this.tree = t || null;

		this.color = c || 'rgba(255,255,255,1.0)';

		this.register();

	};



	Branch.prototype = {

		register: function () {

			this.tree.addBranch(this);

		},

		draw: function () {

			var ctx = this.tree.ctx;

			ctx.beginPath();

			ctx.fillStyle = this.color;

			ctx.moveTo(this.p.x, this.p.y);

			ctx.arc(this.p.x, this.p.y, this.r, 0, Branch.circle, true);

			ctx.fill();

		},

		modify: function () {

			var angle = 0.18 - (0.10 / this.generation);

			this.p.add(this.v);

			this.length += this.v.length();

			this.r *= 0.99;

			this.v.rotate(Branch.random(-angle, angle)); //.mult(0.996);

			if (this.r < 0.8 || this.generation > 10) {

				this.tree.removeBranch(this);

				var l = new Leaf(this.p, 10, this.color, this.tree.ctx);

				l.render();

			}

		},

		grow: function () {

			this.draw();

			this.modify();

			this.fork();

		},

		fork: function () {

			var p = this.length - Branch.random(100, 200); // + (this.generation * 10);

			if (p > 0) {

				var n = Math.round(Branch.random(1, 3));

				this.tree.stat.fork += n - 1;

				for (var i = 0; i < n; i++) {

					Bran.........完整代码请登录后点击上方下载按钮下载查看

网友评论0