TweenLite+Physics2DPlugin实现弹射碎纸屑粒子重力下落效果代码
代码语言:html
所属分类:粒子
代码描述:TweenLite+Physics2DPlugin实现弹射碎纸屑粒子重力下落效果代码
代码标签: TweenLite 纸屑 弹射 粒子 重力 动画
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
body {
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
overflow: hidden;
}
#canvas {
background: linear-gradient(#9FF781, #F3F781);
}
.copy {
position: absolute;
top: 45%;
left: 0;
width: 100%;
text-align: center;
pointer-events: none;
font-family: "Futura", "Helvetica Neue", Helvetica;
color: #333;
}
.copy h1 {
margin: 0;
color: white;
letter-spacing: 1px;
font-size: 7vmin;
font-weight: 700;
}
.copy p {
margin: 0;
}
</style>
</head>
<body>
<canvas id="canvas"></canvas>
<div class="copy">
<h1>Confetti Cannon</h1>
<p>click, drag & release</p>
</div>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/TweenLite.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/Physics2DPlugin.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/lodash-min.js"></script>
<script>
// utilities
function getLength(x0, y0, x1, y1) {
// returns the length of a line segment
const x = x1 - x0;
const y = y1 - y0;
return Math.sqrt(x * x + y * y);
}
function getDegAngle(x0, y0, x1, y1) {
const y = y1 - y0;
const x = x1 - x0;
return Math.atan2(y, x) * (180 / Math.PI);
}
// some constants
const DECAY = 4; // confetti decay in seconds
const SPREAD = 60; // degrees to spread from the angle of the cannon
const GRAVITY = 1200;
class ConfettiCannon {
constructor() {
// setup a canvas
this.canvas = document.getElementById('canvas');
this.dpr = window.devicePixelRatio || 1;
this.ctx = this.canvas.getContext('2d');
this.ctx.scale(this.dpr, this.dpr);
// add confetti here
this.confettiSpriteIds = [];
this.confettiSprites = {};
// vector line representing the firing angle
this.drawVector = false;
this.vector = [{
x: window.innerWidth,
y: window.innerHeight * 1.25,
}, {
x: window.innerWidth,
y: window.innerHeight * 2,
}];
this.pointer = {};
// bind methods
this.render = this.render.bind(this);
this.handleMousedown = this.handleMousedown.bind(this);
this.handleMouseup = this.handleMouseup.bind(this);
this.handleMousemove = this.handleMousemove.bind(this);
this.handleTouchstart = this.handleTouchstart.bind(this);
this.handleTouchmove = this.handleTouchmove.bind(this);
this.setCanvasSize = this.setCanvasSize.bind(this);
this.setupListeners();
this.setCanvasSize();
// fire off for a demo
this.timer = setTimeout(this.handleMouseup, 1000);
}
setupListeners() {
// Use TweenLite tick event for the render loop
TweenLite.ticker.addEventListener('tick', this.render);
// bind events
window.addEventListener('mousedown', this.handleMousedown);
window.a.........完整代码请登录后点击上方下载按钮下载查看
网友评论0