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.addEventListener('mouseup', this.handleMouseup); window.addEventListener('mousemove', this.handleMousemove); window.addEventListener('touchstart', this.handleTouchstart); window.addEventListener('touchend', this.handleMouseup); window.addEventListener('touchmove', this.handleTouchmove); window.addEventListener('resize', this.setCanvasSize); } setCanvasSize() { this.canvas.width = window.innerWidth * this.dpr; this.canvas.height = window.innerHeight * this.dpr; this.canvas.style.width = window.innerWidth + 'px'; this.canvas.style.height = window.innerHeight + 'px'; } handleMousedown(event) { clearTimeout(this.timer); const x = event.clientX * this.dpr; const y = event.clientY * this.dpr; this.vector[0] = { x, y, }; this.drawVector = true; } handleTouchstart(event) { clearTimeout(this.timer); event.preventDefault(); const x = event.touches[0].clientX * this.dpr; const y = event.touches[0].clientY * this.dpr; this.vector[0] = { x, y, }; this.drawVector = true; } handleMouseup(event) { this.drawVector = false; const x0 = this.vector[0].x; const y0 = this.vector[0].y; const x1 = this.vector[1].x; const y1 = this.vector[1].y; const length = getLength(x0, y0, x1, y1); const angle = getDegAngle(x0, y0, x1, y1) + 180; const particles = length / 5 + 5; const velocity = length * 10; this.addConfettiParticles(particles, angle, velocity, x0, y0); } handleMousemove(event) { const.........完整代码请登录后点击上方下载按钮下载查看
网友评论0