原理:
創建一個截取當前場景的截圖
然后對截圖進行bitmap處理
加上tween。
優點:無需任何圖片,特效!適用於任何場景!
//1.卷簾特效
//2.左右切換移動
//3.直接翻
//4.旋轉掉落
//5.隨機一種
class ScreenMovies {
//當前舞台
static MovieStart(_txnums):void {
//創建一個截圖Bitmap
let taget = MtwGame.Instance.stage;
let w = MtwGame.Instance.stage.stageWidth;
let h = MtwGame.Instance.stage.stageHeight;
//新建一個group
let loadTxGrp = new eui.Group();
loadTxGrp.width = w;
loadTxGrp.height = h;
taget.addChild(loadTxGrp)
//循環創建多個截圖bitmap 這里num自由設置
let tx1Number = 40;
//每個橫着的數量
let Xnumber = 5;
//高數量自動計算
let Ynumber = tx1Number / Xnumber;
if (_txnums == 5) {
_txnums = Math.ceil(Math.random() * 4);
}
for (let i = 0; i < tx1Number; i++) {
//計算每個的XY及寬高
let _mcW = w / Xnumber;
let _mcH = h / Ynumber;
let _mcX = i % Xnumber * _mcW;
let _mcY = Math.floor(i / Xnumber) * _mcH;
let renderTexture: egret.RenderTexture = new egret.RenderTexture();
renderTexture.drawToTexture(taget, new egret.Rectangle(_mcX, _mcY, _mcW, _mcH));
let bmp = new egret.Bitmap;
bmp.texture = renderTexture;
bmp.anchorOffsetX = _mcW / 2
bmp.anchorOffsetY = _mcH / 2
bmp.x = _mcX + _mcW / 2;
bmp.y = _mcY + _mcH / 2;
loadTxGrp.addChild(bmp);
let tw = egret.Tween.get(bmp);
//開始特效
switch (_txnums) {
case 1:
tw.to({ scaleX: 0, scaleY: 0, alpha: 0, rotation: 359 }, 800, egret.Ease.circIn).call(onComplete, this);
break;
case 2:
let my_x = -w
if (!(i % 2)) {
my_x = w * 2
}
tw.to({ x: my_x, alpha: 0 }, 800, egret.Ease.circIn).call(onComplete, this);
break;
case 3:
tw.to({ scaleX: 0.2, scaleY: 1, alpha: 0, blurFliter: 0 }, 800, egret.Ease.backInOut).call(onComplete, this);
break;
case 4:
tw.to({ alpha: 0}, 900, egret.Ease.circIn).call(onComplete, this)
break;
default:
tw.to({ scaleX: 1, scaleY: 0, alpha: 0 }, 800, egret.Ease.circIn).call(onComplete, this);
}
}
let upNumber = 0;
function onComplete(evt: Comment) {
upNumber++
if (upNumber == tx1Number) {
taget.removeChild(loadTxGrp)
}
}
}
}
---------原文用的是AS3,我改成了TS,來自egret社區的sjavene