AS3 - 正好在23个空的alpha通道中,下面的图像停止绘制

时间:2014-06-04 18:58:59

标签: actionscript-3 bitmap sprite depth

我注意到,在尝试绘制大量圆圈时,偶尔会出现某种视觉错误,某些圆圈无法正确绘制。好吧,我把它缩小了,并注意到如果有23个或更多的物体在同一个地方有一个100的alpha值,那么下面的物体就不会画。它似乎是逐个像素的,因为部分图像仍在绘制。

最初,这个问题被一个继承了Sprite的类注意到了。它被证实也是Sprites的问题,现在也是Bitmaps。如果任何人都可以找到比没有这个问题的Bitmap更低级别的课程,请说出来,以便我们可以尝试找到问题的根源。

我准备了一个小型的测试课程来演示我的意思。您可以更改第20行的整数值,以便查看我提出的三个测试,以清楚地显示问题。

是否有任何形式的解决方法,或者这只是我必须使用的限制?有谁之前经历过这个吗?尽管实施起来很糟糕,我是否有可能做错事?

package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.display.Bitmap;
    import flash.display.BitmapData;

    public class Main extends Sprite 
    {
        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
            Test(3);
        }

        private function Test(testInt:int):void {
            if(testInt==1){
                addChild(new Bitmap(new BitmapData(200, 200, true, 0xFFFF0000)));
                for (var i:int = 0; i < 22; i++) {
                    addChild(new Bitmap(new BitmapData(100, 100, true, 0x00000000)));
                }
            }
            if(testInt==2){
                addChild(new Bitmap(new BitmapData(200, 200, true, 0xFFFF0000)));
                for (var j:int = 0; j < 23; j++) {
                    addChild(new Bitmap(new BitmapData(100, 100, true, 0x00000000)));
                }
            }
            if(testInt==3){
                addChild(new Bitmap(new BitmapData(200, 200, true, 0xFFFF0000)));
                for (var k:int = 0; k < 22; k++) {
                    addChild(new Bitmap(new BitmapData(100, 100, true, 0x00000000)));
                }
                var M:Bitmap = new Bitmap(new BitmapData(100, 100, true, 0x00000000));
                M.x += 50;
                M.y += 50;
                addChild(M);
            }
        }
    }
}

3 个答案:

答案 0 :(得分:1)

我不知道你为什么要把Bitmap作为孩子添加。我想你应该使用draw()在一个BitmapData上绘制所有“形状”。您可以简单地绘制形状,然后将它们绘制到BitmapData。如果你需要更多解释,我可以更具体。

答案 1 :(得分:0)

将bmp.cacheAsBitmap = ture设置为每个位图

答案 2 :(得分:0)

除了绘制到单个BitmapData之外,另一种尝试方法可能是将位图放入单个Sprite中。为您的Sprite容器设置cacheAsBitmap=true