兼职必备时入3K-PIXI写动画特效就是这么牛(全注释-源码)| 猿创营

2,030 阅读3分钟

不管全世界所有人怎么说,我都认为自己的感受才是正确的。无论别人怎么看,我绝不打乱自己的节奏。喜欢的事自然可以坚持,不喜欢的怎么也长久不了。

只要活着,就要不断学习,永无止境。 因为生活永远有你的盲区,不断学习,可以把盲区缩小那么一点点。 见识,是见识不完的,但是还是要出去见识。 你才有可能过的比别人好一点点。 不止学习,更要用心,心在哪里,结果就在哪里。

在这个夏天不如跟我一起学习兼职必备技能,丰富了技能又能获得“钞”能力,感兴趣的可以看看Pixijs安装和使用简介上手简单,你确定不试试? 先介绍下背景为什么要学习Pixijs,也是最近在跟大帅老师那了解到的“钞”能力,居然简简单单的就多了一项技能,而且还能有外快,何乐而不为呢?

制作自行车刹车特效实战 使用Pixijs号称是性能最高, 最快速的html5创意引擎, webgl2d的图形渲染引擎 gsap 是老牌引擎, 经历过flash, 从flash过度而来的引擎. 通过以上技术来实现vanmoof刹车动效2, 3D交互的感觉.

最终演示效果 文章结尾附完整源码

8b6d5452f58c458ab77efc25138226ce_tplv-k3u1fbpfcp-zoom-crop-mark_3024_3024_3024_1702.webp

开始实战 一步一步搭建

开始前准备工作 推荐使用 vscode 下载 live preview 提供服务,预览实施效果 下载插件 image.png

思路

  1. 由那几个部分组成
  2. 如何进行交互运动
  3. 运动如何绑定

从界面上就可以看到,需要

  • 一个按钮(来控制按下的操作)
  • 一个自行车的图片(自行车,以及车把的图片,因为要按下的时候刹车,所以需要一个单独的刹车图片)
  • 公路(底层的公路)
  • 运动线条

一、初始化页面,创建PIXI应用

constructor(selector){
// 创建
this.app = new PIXI.Application({
   width:window.innerWidth,
   height:window.innerHeight,
   backgroundColor:0xffffff,
   resizeTo:window
})
this.stage = this.app.stage;
// 渲染
document.querySelector(selector).appendChild(this.app.view);

预览 image.png

二、加载静态资源

// 加载资源
this.loader = new PIXI.Loader();
this.loader.add("btn.png","images/btn.png");
this.loader.add("btn_circle.png","images/btn_circle.png");
this.loader.add("brake_bike.png","images/brake_bike.png");
this.loader.add("brake_handlerbar.png","images/brake_handlerbar.png");
this.loader.add("brake_lever.png","images/brake_lever.png");
this.loader.add("malu.png","images/malu.png");
this.loader.add("malu_line.png","images/malu_line.png");
this.loader.load();

三、绘画出马路、车架和刹车把手

//马路
let maluliney = new PIXI.Container(); 
maluliney.pivot.x = window.innerWidth/2;
maluliney.pivot.y = window.innerHeight/2;
//位置
maluliney.x = window.innerWidth/2;
maluliney.y = window.innerHeight/2;
this.stage.addChild(maluliney);
//旋转
maluliney.rotation = 35*Math.PI/180;
//引入马路
let malu = new PIXI.Sprite(this.loader.resources['malu.png'].texture);
//缩放
malu.pivot.x = malu.pivot.y = 0.5;
maluliney.addChild(malu);
//车
let bikeContainer = new PIXI.Container();
this.stage.addChild(bikeContainer);
bikeContainer.scale.x = bikeContainer.scale.y = 0.3;
let bikeImage = new PIXI.Sprite(this.loader.resources['brake_bike.png'].texture);
bikeContainer.addChild(bikeImage);
let bikeLever = new PIXI.Sprite(this.loader.resources['brake_lever.png'].texture);
bikeContainer.addChild(bikeLever);
bikeLever.pivot.x = 455;
bikeLever.pivot.y = 455;
bikeLever.x = 722;
bikeLever.y = 900;
let bikeHand = new PIXI.Sprite(this.loader.resources['brake_handlerbar.png'].texture);
bikeContainer.addChild(bikeHand);

四、实现按钮效果

//调用创建按钮
let actionbtn = this.createAction();
// 调整坐上边距
actionbtn.x = actionbtn.y = 500;
actionbtn.interactive = true;
actionbtn.buttonMode = true;
// 按下效果
actionbtn.on("mousedown",()=>{
   //按下执行刹车把的动画
   gsap.to(bikeLever,{duration:.6,rotation:Math.PI/180*-30});
   pause();
})
// 松开效果
actionbtn.on("mouseup",()=>{
   //松开执行刹车把松开动画
   gsap.to(bikeLever,{duration:.6,rotation:0});
   start();
})

五、车辆启动的粒子效果

//新建点的容器
let particle = new PIXI.Container(); 
this.stage.addChild(particle);
//调整中心点
particle.pivot.x = window.innerWidth/2;
particle.pivot.y = window.innerHeight/2;
//调整位置
particle.x = window.innerWidth/2;
particle.y = window.innerHeight/2;
//调整角度(旋转)
particle.rotation = 35*Math.PI/180;
//新建一个数组存储点位
let particlelist = [];
// 循环创建点
for (let i = 0; i < 10; i++) {
   let gr = new PIXI.Graphics();
   // 取色
   gr.beginFill(this.setColor4());
   gr.drawCircle(0,0,6);
   gr.endFill();
   // 位置随机取
   let pitem = {
      sx:Math.random()*window.innerWidth,
      sy:Math.random()*window.innerHeight,
      gr:gr
   }
   gr.x = pitem.sx;
   gr.y = pitem.sy;
   particle.addChild(gr);
   particlelist.push(pitem);

大功告成!感谢大帅的支持!

PS:灵感以及技术学习来自 大帅老猿 ,一个编程“三十多年”经验的老程序猿猴!

公众号里搜 大帅老猿,在他这里可以学到很多东西!快来和我一起学习!卷!

》》GitHub源码入口《《