美文网首页
Egret游戏实现反遮罩,镂空操作实例

Egret游戏实现反遮罩,镂空操作实例

作者: PurySun | 来源:发表于2019-08-21 10:22 被阅读0次
镂空演示

游戏中反遮罩常用于场景切换、新手引导镂空高亮区域等。

使用Egret开发,主要用到橡皮擦功能,即混合模式egret.BlendMode.ERASE

实例用到一张背景图和一张纯色遮罩图。

1. 添加背景图到舞台

    let sky = this.createBitmapByName("bg_jpg");
    sky.width = this._stage.stageWidth;
    sky.height = this._stage.stageHeight;
    this.addChild(sky);

2. 构建遮罩纹理

    //-- 将原来的遮罩图的混合模式设置为擦除
    let bitmapMask = new egret.Bitmap(RES.getRes('mask'));
    bitmapMask.blendMode = egret.BlendMode.ERASE;
    bitmapMask.anchorOffsetX = bitmapMask.width >> 1
    bitmapMask.anchorOffsetY = bitmapMask.height >> 1;
    bitmapMask.scaleX = bitmapMask.scaleY = this._scaleRate;
    bitmapMask.x = this._stage.stageWidth >> 1;
    bitmapMask.y = this._stage.stageHeight >> 1;

    //-- 反遮罩容器
    let reverseMask = new egret.Sprite();
    reverseMask.graphics.beginFill(0, 1);
    reverseMask.graphics.drawRect(0, 0, this._stage.stageWidth, this._stage.stageHeight);
    reverseMask.graphics.endFill();
    reverseMask.addChild(bitmapMask);

    //-- 创建一个RenderTexture,把反遮罩绘制上去
    let renderTex = new egret.RenderTexture();
    renderTex.drawToTexture(reverseMask);
    let mask = new egret.Bitmap(renderTex);
    this._maskBitmap = mask;
    this.mask = this._maskBitmap;
    !this._maskBitmap.parent && this.addChild(this._maskBitmap);

橡皮擦一擦到底,若将其父容器也设置egret.BlendMode.ERASE模式,便不会擦到底。此处的遮罩纹理只能用egret.Bitmap或者Sprite的矢量绘图,其他的如Shape目测不行,有一定的局限性。

Github地址:
https://github.com/pury/ReverseMaskByEgret

By Pury.

相关文章

网友评论

      本文标题:Egret游戏实现反遮罩,镂空操作实例

      本文链接:https://www.haomeiwen.com/subject/tenvsctx.html