描述: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;

得以解决问题 遮罩正常显示

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Free Web Hosting