1. 程式人生 > >LayaAir 點陣圖新增遮罩與濾鏡

LayaAir 點陣圖新增遮罩與濾鏡

目錄

mask 遮罩

濾鏡

ColorFilter 顏色濾鏡

GlowFilter 發光濾鏡

BlurFilter 模糊濾鏡


mask 遮罩

laya.display.Sprite mask 屬性如下:

mask : Sprite

遮罩,可以設定一個物件(支援點陣圖和向量圖),根據物件形狀進行遮罩顯示。 【注意】遮罩物件座標系是相對遮罩物件本身的,和Flash機制不同

下面用程式碼建立一個圓形的遮罩區域,通過 mask 屬性,即可實現遮罩效果。

//初始化舞臺,設定大小,當瀏覽器不支援 WebGL 時自動切換為 Canvas,
Laya.init(768, 1024,Laya.WebGL);

//將精靈物件設定為全域性變數
let imgSprite;

//被切換的圖片地址,本次使用的是 LayaAir 2.0.0beta5 版本,圖片資源位於 bin/images下
let apaches = ["images/apache_1.png"];

//LoaderManager 類用於批量載入資源.此類是單例,不要手動例項化此類.通過 Laya.loader 訪問
//load 方法載入影象資源,仍然返回 LoaderManager物件,所以可以鏈式操作.載入成功後,通過回撥方法繪製圖像並新增到舞臺
//Handler 是事件處理器類,create 表示從物件池內建立一個Handler,預設會執行一次並立即回收
Laya.loader.load(apaches,Laya.Handler.create(this,function(){
    //建立精靈物件
    imgSprite = new Laya.Sprite();
    imgSprite.pos(200,30);
    
    //laya.resource.Texture(紋理物件),載入完成的圖片資源,後期根據它來獲取影象的尺寸
    let texture = Laya.loader.getRes(apaches[0]);

    //設定精靈寬高,相當於分別設定width和height屬性,width與height表示顯示物件的寬高
    //width、height 預設是0,此寬高用於滑鼠碰撞檢測,並不影響顯示物件影象大小,所以必須設定了width與height之後,單擊事件才會有效
    //laya.resource.Texture 是一個紋理處理類.width、height 屬性表示紋理(圖片)實際寬高
    imgSprite.size(texture.width,texture.height);

    //drawTexture 繪製圖像時,x,y偏移量不寫時預設為0,假如偏移出了 imgSprite 的範圍,則會出現點選圖片無效,單擊精靈位置有效
    imgSprite.graphics.drawTexture(texture);

    //將精靈新增到舞臺顯示(可以先新增到舞臺,之後再對精靈進行處理)
    Laya.stage.addChild(imgSprite);

    //為精靈(圖片)繫結單擊事件
    imgSprite.on(Laya.Event.CLICK,this,addMask);
}));

//新增遮罩
function addMask(){
    //建立遮罩物件(精靈)
    let maskSprite = new Laya.Sprite();
    //由遮罩精靈獲取繪圖物件繪製一個圓形的遮罩區域,遮罩物件座標系是相對遮罩物件本身的,(95,41)表示圓形的原點座標,50 表示半徑
    //第三個引數表示填充顏色,或者填充繪圖的漸變物件。
    maskSprite.graphics.drawCircle(95,41,50,"#ff0000");
    //對 影象實現遮罩效果
    imgSprite.mask = maskSprite;
}

官網示例:https://layaair.ldc.layabox.com/demo/?category=2d&group=Sprite&name=MagnifyingGlass

濾鏡

     LayaAir 引擎提供了顏色濾鏡、發光(或陰影)濾鏡、模糊濾鏡三種效果,其中顏色濾鏡支援 Canvas 與 WebGL 模式,而發光濾鏡與模糊濾鏡由於對效能的消耗較大,因此僅支援 WebGL 模式。

ColorFilter 顏色濾鏡

     顏色濾鏡類 ColorFilter 位於 laya.filters

包中,通過指定顏色矩陣(排列成4 x 5 的矩陣)改變各顏色通道。

     設定顏色濾鏡步驟如下:

1、先設定一個(4 * 5)顏色矩陣,如下表示紅色。關於顏色矩陣本文不做闡述,請另行查詢。
var colorMatrix = 
  [
  1, 0, 0, 0, 0, //R
  0, 0, 0, 0, 0, //G
  0, 0, 0, 0, 0, //B
  0, 0, 0, 1, 0, //A
];

2、然後用 ColorFilter 構造器傳入顏色矩陣建立一個顏色濾鏡例項,如:
var redFilter = new Laya.ColorFilter(colorMatrix)

3、最後通過 Spriter 的 filters 屬性將顏色濾鏡效果疊加到點陣圖中。請看下面的程式碼。

//初始化舞臺,設定大小,當瀏覽器不支援 WebGL 時自動切換為 Canvas,
Laya.init(1334, 750,Laya.WebGL);
//建立原圖
createImg(0,10);

//建立綠色濾鏡影象
createBuleFilter();

//建立灰色濾鏡影象
createGrayFilter();

//繪製圖像——————這是不加濾鏡的原圖,返回原圖
//x、y 表示影象顯示的位置
function createImg(x,y){
    //建立精靈物件
    var imgSprite = new Laya.Sprite();
    imgSprite.pos(x,y);

    //載入並顯示圖片,不用像 Html Canvas 一樣擔心圖片資源未載入完成的問題
    imgSprite.loadImage("images/apache_1.png");
    //新增到舞臺
    Laya.stage.addChild(imgSprite);

    //將影象返回-用於後期靈活的設定各種濾鏡
    return imgSprite;
};

//建立綠色濾鏡
function createBuleFilter(){
    //建立濾鏡顏色矩陣--綠色
    let colorMatrix =  [
        0, 0, 0, 0, 0, //R
        0, 1, 0, 0, 0, //G
        0, 0, 0, 0, 0, //B
        0, 0, 0, 1, 0, //A
    ];
    //建立綠色顏色濾鏡
    //ColorFilter是顏色濾鏡.使用 ColorFilter 類可以將 4 x 5 矩陣轉換應用於輸入影象上的每個畫素的 RGBA 顏色和 Alpha 值,以生成具有一組新的 RGBA 顏色和 Alpha 值的結果
    //使用構造器建立一個 ColorFilter 例項
    let buleFilter = new Laya.ColorFilter(colorMatrix);

    //建立影象並新增濾鏡,Sprite 的 filters 屬性可以設定多個濾鏡組合,所以值是陣列
    createImg(410,10).filters = [buleFilter];
}

//建立灰色濾鏡
function createGrayFilter(){
    //建立濾鏡顏色矩陣--灰色
    let colorMatrix =  [
        0.3086, 0.6094, 0.0820, 0, 0,  //R
        0.3086, 0.6094, 0.0820, 0, 0, //G
        0.3086, 0.6094, 0.0820, 0, 0,  //B
        0, 0, 0, 1, 0, //A
    ];
    //建立灰色顏色濾鏡
    let redFilter = new Laya.ColorFilter(colorMatrix);

    //建立影象並新增濾鏡
    createImg(205,10).filters = [redFilter];
}

GlowFilter 發光濾鏡

     發光濾鏡類 GlowFilter 位於 laya.filters 包中,通過調整發光的偏移角度也可以當成陰影濾使用,注意:該濾鏡只支援 WebGL模式下有效。

特別提醒:

LayaAir 應用 bin/libs 資料夾下存放了 LayaAir 引擎各模組的 JS 檔案,專案中需要使用哪個模組就需要在 bin/index.html 或者 index.js 中引入對應的 模組包 JS 檔案。

其中 laya.filter.js 包含更多 webgl 濾鏡,如外發光,陰影,模糊以及其它。意思就是使用顏色濾鏡可以不用匯入 laya.filter.js 檔案,但是使用發光濾鏡以及模糊濾鏡等時,必須在 bin/index.html 或者 index.js 中匯入 laya.filter.js 檔案。

會了顏色濾鏡之後,發光濾鏡就很簡單了,程式碼如下:

//初始化舞臺,設定大小,當瀏覽器不支援 WebGL 時自動切換為 Canvas,
Laya.init(1334, 750,Laya.WebGL);
//為了濾鏡效果更加清晰,設定舞臺背景為白色
Laya.stage.bgColor = "#ffffff";

createImg(0,10);
createGlowFilter();
createShadeFilter();
 
//繪製圖像——————這是不加濾鏡的原圖,返回原圖
//x、y 表示影象顯示的位置
function createImg(x,y){
    //建立精靈物件
    var imgSprite = new Laya.Sprite();
    imgSprite.pos(x,y);
 
    //載入並顯示圖片,不用像 Html Canvas 一樣擔心圖片資源未載入完成的問題
    imgSprite.loadImage("images/apache_1.png");
    //新增到舞臺
    Laya.stage.addChild(imgSprite);
 
    //將影象返回-用於後期靈活的設定各種濾鏡
    return imgSprite;
};

//建立發光濾鏡
function createGlowFilter(){
     /**
     * 建立發光濾鏡
     * @param	color	濾鏡的顏色
     * @param	blur	邊緣模糊的大小
     * @param	offX	X軸方向的偏移
     * @param	offY	Y軸方向的偏移
     */
    let glowFilter = new Laya.GlowFilter("#E37E31",8,0,0);
 
    //建立影象並新增濾鏡,Sprite 的 filters 屬性可以設定多個濾鏡組合,所以值是陣列
    createImg(205,10).filters = [glowFilter];
}

//建立陰影濾鏡
function createShadeFilter(){
    let glowFilter = new Laya.GlowFilter("#000000",2,5,2);
    createImg(410,10).filters = [glowFilter];
}

BlurFilter 模糊濾鏡

模糊濾鏡類 BlurFilter 位於 laya.filters 包中,通過調整 strength 引數設定模糊濾鏡的強度,值越大,越模糊,該濾鏡只支援WebGL模式下有效。

/**
 * 模糊濾鏡
 * @param   strength    模糊濾鏡的強度值
 */
constructor(strength?: number);

使用發光濾鏡以及模糊濾鏡等時,必須在 bin/index.html 或者 index.js 中匯入 laya.filter.js 檔案。

//初始化舞臺,設定大小,當瀏覽器不支援 WebGL 時自動切換為 Canvas,
Laya.init(1334, 750,Laya.WebGL);

createImg(0,10);
createBlueFilter1();
createBlueFilter2();
 
//繪製圖像——————這是不加濾鏡的原圖,返回原圖
//x、y 表示影象顯示的位置
function createImg(x,y){
    //建立精靈物件
    var imgSprite = new Laya.Sprite();
    imgSprite.pos(x,y);
 
    //載入並顯示圖片,不用像 Html Canvas 一樣擔心圖片資源未載入完成的問題
    imgSprite.loadImage("images/apache_1.png");
    //新增到舞臺
    Laya.stage.addChild(imgSprite);
 
    //將影象返回-用於後期靈活的設定各種濾鏡
    return imgSprite;
};

//建立模糊濾鏡1
function createBlueFilter1(){
   //為設定模糊濾鏡的強度值 strength 時,預設為 4
    let blurFilter = new Laya.BlurFilter();
 
    //建立影象並新增濾鏡,Sprite 的 filters 屬性可以設定多個濾鏡組合,所以值是陣列
    createImg(205,10).filters = [blurFilter];
}

//建立模糊濾鏡2
function createBlueFilter2(){
    let blurFilter = new Laya.BlurFilter(8);
    createImg(410,10).filters = [blurFilter];
}