p5实现一个可交互跟随鼠标的蝴蝶动画效果代码
代码语言:html
所属分类:动画
代码描述:p5实现一个可交互跟随鼠标的蝴蝶动画效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> </head> <body > <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/p5.1.4.0.js"></script> <script > if(typeof Float32Array != 'undefined') { glMatrixArrayType = Float32Array; } else if(typeof WebGLFloatArray != 'undefined') { glMatrixArrayType = WebGLFloatArray; // This is officially deprecated and should dissapear in future revisions. } else { glMatrixArrayType = Array; } const colors = [[255,0,255,229],[255,0,255,204],[255,0,255,178],[255,0,255,153]]; let path; let Width , Height; let canvas , ctx , time; let body,left,rigth; let Butterflys = []; let trans , angle , scale ,vector, Mouse = {x:0 , y:0}; let stars = [] , stasNumbre = 0; function preload() { let url = 'https://hankuro.org/json/pathdata.json'; path = loadJSON(url); } function setup() { canvas = createCanvas(windowWidth, windowHeight); Width = windowWidth; Height = windowHeight; ctx = canvas.drawingContext; time = new Date().getTime(); body = new BodyButterfly(path.body,true); left = new LeftButterfly(path.left,false); rigth = new RigthButterfly(path.rigth,false); Butterflys.push(body,left,rigth); trans = new Vretex(); angle = new Vretex(); scale = new Vretex([1,1,1]); // star = new Star(sOfEnd); // star.setPosition(trans); } function draw() { applyMatrix(1, 0, 0, 1, Width/2, Height/2); clear(); stroke(0, 0, 0); strokeWeight(0.5); fill(0,0,0); Mouse.x = mouseX-(width/2) ; Mouse.y = mouseY-(height/2) ; let m = new Vretex([Mouse.x,Mouse.y,0]); vector = m.Subtraction(trans); vector = vector.division(200); let dx = Mouse.x - trans.x; let dy = Mouse.y - trans.y; let r = Math.atan2(dy,dx); trans = trans.Add(vector) ; // line(trans.x,trans.y,vector.x,vector.y); // ellipse(0, 0, 5, 5); // trans = trans.Add(vector); // console.log(trans); Butterflys.forEach((b)=>{ // angle.x = 0 * Math.PI/180 ; angle.z = r + 90 * Math.PI / 180; trans.multiplication(1000); b.postVretex(Mouse,trans); b.setMatrix(trans,angle,scale); b.draw(); }); let Flapping = Butterflys[0].Flapping; let now = new Date().getTime(); if(now - time > 1500){ if(Flapping) stars.push(new StarControl(trans,sOfEnd,stasNumbre++)); time = now; } stars.forEach((s)=>{ if(!s.Dead) s.draw(); }); // star.draw(); // rotate(r); // line(0,0,100,0); } function windowResized() { resizeCanvas(windowWidth, windowHeight); Width = windowWidth; Height = windowHeight; ctx = .........完整代码请登录后点击上方下载按钮下载查看
网友评论0