Egret社区

[Egret Engine] drawToTexture出问题了

2019-6-11 17:05
2090
产品 Egret Engine 版本 5.2.20
复现概率 100% 平台 iOS 12.2
复现步骤 看代码
问题描述 在ios原生和微信小游戏运行环境里,drawToTexture第二次执行时,会把内容全擦除完,什么也没有了,ios原生的解决方法是把libEgretNativeIOS.a还原到5.2.19之前的旧版,微信小游戏无法解决。
错误代码 this.maskRender.drawToTexture(this.maskCon, this.clipBounds);
BUG截图
/**
*
* 反向遮罩图片
*/
class EraseMaskImage {
        private maskCon:egret.DisplayObjectContainer;
        private maskRender:egret.RenderTexture;
        public maskSprite:egret.Shape;
        private maskGraphics:egret.Graphics;
        //public baseObj:egret.DisplayObject;
        public maskImg:egret.Bitmap;
        private lightMatrix:egret.Matrix;
        //public x:number = 0;
        //public y:number = 0;
        public radius:number = 0;

        public clipBounds:egret.Rectangle;

        public constructor(obj:egret.DisplayObject) {
                this.maskCon = new egret.DisplayObjectContainer();
                this.maskCon.touchEnabled = false;

                obj.x = 0;
                obj.y = 0;
                if(obj.parent){
                        obj.parent.removeChild(obj);
                }
                //this.baseObj = obj;
                this.maskCon.addChild(obj);

                //设置反向遮罩图形
               
                let maskSprite = new egret.Shape();
                this.maskCon.addChild(maskSprite);
                maskSprite.x = 0;
                maskSprite.y = 0;
                maskSprite.blendMode = egret.BlendMode.ERASE;
                this.maskSprite = maskSprite;
                this.maskGraphics = maskSprite.graphics;

                this.clipBounds = new egret.Rectangle(0, 0, obj.width, obj.height);

                this.maskRender = new egret.RenderTexture();
                this.maskRender.drawToTexture(this.maskCon, this.clipBounds);

                this.maskImg = new egret.Bitmap(this.maskRender);
                this.maskImg.pixelHitTest = true;  //镂空区域不响应点击,这样可以穿透点击到下面的背景
                this.maskImg.scaleX = 4;
                this.maskImg.scaleY = 4;

                this.lightMatrix = new egret.Matrix();               
        }

        public clearMask(){
                console.log("clearMask()");
                this.maskGraphics.clear();
                this.maskRender.drawToTexture(this.maskCon);
        }

        public drawGradientCircle(radius)
        {
                console.log("drawGradientCircle this.clipBounds="+this.clipBounds);
                radius = radius / 4;
               
                this.lightMatrix.createGradientBox(radius*2, radius*2, 0, -radius, -radius);
                this.maskGraphics.clear();
                this.maskGraphics.beginGradientFill(egret.GradientType.RADIAL,
                                [0x0, 0x0, 0x0], [1, 0.8, 0], [0, 200, 255],
                                        this.lightMatrix);
                this.maskGraphics.drawCircle(0, 0, radius);
                this.maskGraphics.endFill();
               
                this.maskRender.drawToTexture(this.maskCon, this.clipBounds);                //ios原生环境下和微信小游戏环境下,这句第二次执行时会把texture内容擦除清空了
        }

}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部