Flash原生移动开发GPU渲染问题之多重遮罩的情况下显示不全
描述:A 为一个Sprite 里面包含有遮罩效果,将A new 出 多个实例,并把这些实例添加到容器B内部 容器使用遮罩C 同时开启GPU渲染模式,那么在部分安卓手机(oppo手机)上 将只会显示第一个 A实例 其他的为透明
设备:oppo手机
由于项目代码不易放出 则做了一个测试代码 如下
Item 类:
public class Item extends Sprite
{
public function Item()
{
var bg:Bg = new Bg( );
this.addChild( bg );
var shape:Shape = new Shape( );
shape.graphics.beginFill( 0 );
shape.graphics.drawCircle( 0,0,40 );
shape.graphics.endFill();
this.addChild( shape );
shape.x = 40;
shape.y = 40;
bg.mask = shape;
}
}
测试主类
public function CacheAsBmTest()
{
var mask:Sprite = new Sprite( );
mask.graphics.beginFill( 0 );
mask.graphics.drawRect( 0,0, 900,300 );
mask.graphics.endFill();
this.addChild( mask );
var container:Sprite = new Sprite( );
container.mask = mask;
this.addChild( container );
for( var i:int = 0;i < 6;i ++ )
{
var item:Item = new Item( );
container.addChild( item );
item.x = item.width / 2 + item.width * i ;
item.y = item.height;
}
}
如上按照这样的做法 本打算生成 6个Item 结果在界面显示 只能看到第一个
通过尝试,将GPU模式切换到 其他 模式 显示正常,猜测是矢量图的问题 于是将主类中的mask遮罩 替换为Bitmap 结果依然没能解决
最后通过添加
mask.cacheAsBitmap = true;
container.cacheAsBitmap = true;
得以解决问题 遮罩正常显示