Можно сделать только 22 кусочка головоломки видимыми - проблема маски? - PullRequest
2 голосов
/ 04 января 2012

Я делаю мозаику в мгновение ока.Но у меня странная ошибка.Есть 25 штук, 5х5.Я передаю в фоновом режиме bitmapData к частям по мере их создания.

Для каждого фрагмента я создаю одну растровую маску в форме головоломки.

Таким образом, каждая часть содержит растровое изображение, битовые данные которого являются текстурой головоломки.И каждый кусок имеет кусок маски.

Когда я просто показываю маски, все 25 пьес вытягиваются на сцену.

Но когда я использую маски частей, чтобы замаскировать текстуру, у меня появляется жесткое ограничение на 22 части, к которым применяется маска.Это происходит, если я использую 25 кусочков или даже 80 или 100. Каждый раз, только последние 22 созданные кусочки будут отображать текстуру.

Есть идеи?

По запросу, показывая некоторый код.

    public class PuzzlePiece extends Sprite 
    {
        private var maskBitmap:Bitmap;
        private var _texture:BitmapData
        private var bg:Bitmap;
        private static var COUNT:uint
        public function PuzzlePiece() 
        {
            PuzzlePiece.COUNT ++;
            trace("new Piece Made", PuzzlePiece.COUNT);
            filters = [new GlowFilter(0x000000, 1, 16, 16, 1, 3, true), new BevelFilter(4, 45, 0xFFFFFF, 0.75, 0, 0.75, 4, 4, 1, 3, "inner", false)];
            bg = new Bitmap();
            addChild(bg);
            this.mouseChildren = false;
            this.buttonMode = true;
            addEventListener(MouseEvent.ROLL_OVER, onRollOver);
            addEventListener(MouseEvent.ROLL_OUT, onRollOut);
        }

        private function onRollOver(e:MouseEvent):void 
        {
            TweenMax.to(this, 0.5, { colorTransform: { tint:0xff0000, tintAmount:0.5 }} );
        }

        private function onRollOut(e:MouseEvent):void 
        {
            TweenMax.to(this, 0.5, { removeTint:true } );
        }

        /**
         * called before set texture
         */     
        public function setmask(b:Bitmap):void {
            addChild(b);
            maskBitmap = b;
            this.cacheAsBitmap = true;
            b.cacheAsBitmap = true;
            this.mask = b;
            trace("piece -> Set Mask", PuzzlePiece.COUNT);                      
        }

        public function get texture():BitmapData 
        {
            return _texture;
        }

        public function set texture(value:BitmapData):void 
        {
            _texture = value;
            bg.bitmapData = _texture;
            trace("piece -> Set Texture", PuzzlePiece.COUNT);

        }
    }

}

Родительский класс создает один из них и передает растровое изображение, которое будет использоваться в качестве маски,и устанавливает растровые данные, которые будут использоваться в качестве текстуры.

1 Ответ

0 голосов
/ 07 марта 2012

Причина, по которой растровое изображение маскирует другое растровое изображение, область попадания включает в себя прозрачные области, поскольку растровое изображение представляет собой квадрат или прямоугольник независимо от его содержимого, например: если у вас есть файл PNG, содержащий синий круг, растровое изображение / изображение PNG по-прежнемуквадрат, но внешняя часть круга просто прозрачна, но все еще там, образуя размер растрового изображения

Поскольку у меня нет вашего полного кода, я предполагаю, что это флэш-память, удаляющая некоторые из ваших изображений, сборщик мусора iv имелэта проблема куча раз с вложенными муви клипами.

примечание: у вас не может быть маски в маске:

надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...