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

镂空演示

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

使用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.

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值