Egret社区

[Bug处理中] 显示对象混合模式作用效果不正确

2015-11-25 15:11
362518
产品 Egret Engine 版本 2.54
复现概率 100% 平台 Windows 7
复现步骤 需求实现镂空背景部分的显示,所以采用了擦除的混合模式,底层是一个黑色的底,上一层的显示对象是一个圆形,圆使用擦除模式跟底层做混合。 但是 出现的效果是 上层的圈直接变成黑色了。底层也没出现擦除的效果。
问题描述 需求实现镂空背景部分的显示,所以采用了擦除的混合模式,底层是一个黑色的底,上一层的显示对象是一个圆形,圆使用擦除模式跟底层做混合。 但是 出现的效果是 上层的圈直接变成黑色了。底层也没出现擦除的效果。
错误代码 this._bg = new GameBitmap;
this._bg.setDataBySource("background.jpg");
this._bg.x = 0;
this._bg.y = 0;
this._show = new GameBitmap;
this._show.x = 0;
this._show.y = 0;
this._show.setDataBySource("box.png");
this._show.blendMode = egret.BlendMode.ERASE;
this.addChild(this._bg);
this.addChild(this._show);
BUG截图
本帖最后由 acxzx 于 2015-11-25 15:31 编辑

需求实现镂空背景部分的显示,所以采用了擦除的混合模式,底层是一个黑色的底,上一层的显示对象是一个圆形,圆使用擦除模式跟底层做混合。 但是 出现的效果是  上层的圈直接变成黑色了。底层也没出现擦除的效果。

如果没使用混合模式的效果是这样的

@yjtx
求助2.jpg
分享到 :
3 人收藏

18 个回复

倒序浏览
yjtx  官方团队 | 2015-11-25 15:53:21
把demo提供下,我这边拿shape测试没问题。

这个是我的测试代码
var container:egret.DisplayObjectContainer = new egret.DisplayObjectContainer();
        container.width = 300;
        container.height = 300;
        var shape:egret.Shape = new egret.Shape();
        shape.graphics.beginFill(0x000000, 1);
        shape.graphics.drawRect(0, 0, 300, 300);
        shape.graphics.endFill();
        container.addChild(shape);

        var erase:egret.Shape = new egret.Shape();
        erase.graphics.beginFill(0x000000, 1);
        erase.graphics.drawCircle(50, 50, 50);
        erase.graphics.endFill();
        container.addChild(erase);
        erase.x = 200;
        erase.y = 200;

        erase.blendMode = egret.BlendMode.ERASE;

        this.addChild(container);
acxzx  登堂入室 | 2015-11-25 16:18:25
yjtx 发表于 2015-11-25 15:53
把demo提供下,我这边拿shape测试没问题。

这个是我的测试代码

我单独出个demo 处理 稍等一会
acxzx  登堂入室 | 2015-11-25 16:25:22
yjtx 发表于 2015-11-25 15:53
把demo提供下,我这边拿shape测试没问题。

这个是我的测试代码

你的效果怎么样的 你能发个图我看下?
acxzx  登堂入室 | 2015-11-25 16:28:53
demo来了 代码我在你的基础上加了一句才能实现

var container:egret.DisplayObjectContainer = new egret.DisplayObjectContainer();
container.width = 300;
container.height = 300;
var shape:egret.Shape = new egret.Shape();
shape.graphics.beginFill(0xff00ff,0.5);
shape.graphics.drawRect(0, 0, 300, 300);
shape.graphics.endFill();
container.addChild(shape);

var erase:egret.Shape = new egret.Shape();
erase.graphics.beginFill(0x000000, 1);
erase.graphics.drawCircle(50, 50, 50);
erase.graphics.endFill();
container.addChild(erase);
erase.x = 200;
erase.y = 200;

erase.blendMode = egret.BlendMode.ERASE;

this.addChild(container);
//新增的 否则无法镂空container.blendMode =   egret.BlendMode.ERASE;
其次 出现了另外一个问题:我的背景颜色设置的颜色并不是灰色 为什么渲染出来的是灰色

demo.rar

483.99 KB, 下载次数: 15, 下载积分: 银子 -1

demo

acxzx  登堂入室 | 2015-11-25 16:31:35
上面的demo里面 我的背景颜色设置的是0xff00ff

但是表现出来的颜色不对
问题1.jpg
acxzx  登堂入室 | 2015-11-25 16:55:44
yjtx 发表于 2015-11-25 15:53
把demo提供下,我这边拿shape测试没问题。

这个是我的测试代码

赶紧来处理
yjtx  官方团队 | 2015-11-25 16:59:46

var sky:egret.Bitmap = new egret.Bitmap(RES.getRes("bg_jpg"));
        this.addChild(sky);
        var stageW:number = this.stage.stageWidth;
        var stageH:number = this.stage.stageHeight;
        sky.width = stageW;
        sky.height = stageH;

        var container:egret.DisplayObjectContainer = new egret.DisplayObjectContainer();
        container.width = 300;
        container.height = 300;
        var shape:egret.Shape = new egret.Shape();
        shape.graphics.beginFill(0x000000, 1);
        shape.graphics.drawRect(0, 0, 300, 300);
        shape.graphics.endFill();
        container.addChild(shape);

        var erase:egret.Shape = new egret.Shape();
        erase.graphics.beginFill(0x000000, 1);
        erase.graphics.drawCircle(50, 50, 50);
        erase.graphics.endFill();
        container.addChild(erase);
        erase.x = 200;
        erase.y = 200;

        erase.blendMode = egret.BlendMode.ERASE;

        //this.addChild(container);


        var renderTexture:egret.RenderTexture = new egret.RenderTexture();
        renderTexture.drawToTexture(container);

        var bitmap:egret.Bitmap = new egret.Bitmap();
        bitmap.texture = renderTexture;
        this.addChild(bitmap);

你先这么处理下吧
acxzx  登堂入室 | 2015-11-25 17:03:17
yjtx 发表于 2015-11-25 16:59
var sky:egret.Bitmap = new egret.Bitmap(RES.getRes("bg_jpg"));
        this.addChild(sky);
        ...

确定有问题吗? 还是我的使用姿势有问题  
yjtx  官方团队 | 2015-11-25 17:04:47
acxzx 发表于 2015-11-25 17:03
确定有问题吗? 还是我的使用姿势有问题

因为现在还没有实现flash layer的那个属性,导致没法只在容器去擦除。

暂时的办法就是你把你那个容器draw到一个renderTexture上,然后用bitmap来画
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

返回顶部