2011-08-04 2 views
0

Я пытаюсь получить эффект пузыря. Я сделал максимум с помощью freeactionscript.com.Как маскировать динамически созданный MovieClips

Теперь я хочу отобразить анимацию для конкретной области. Я использовал следующий код, но это не работает. Как я могу это сделать?

for (var i:uint = 0; i < noOfBubbles; i++) { 
    var bubble:Bubble = new Bubble(); 
     bubbles.push(bubble); 
     Layer_mc.mask = bubble; 
     //i have used ENTER_FRAME handler for animation   
} 

ответ

1

Почему бы не создать маску из вашего Bubble класса, следующие является примером этого:

Main.as (класс документа):

package 
{ 
    import com.flashdevelopprojects.display.Bubble; 
    import flash.display.Bitmap; 
    import flash.display.Sprite; 
    import flash.events.Event; 

    [SWF(width="250", height="250", backgroundColor="0xFFFFFF", frameRate="32")] 
    public class Main extends Sprite 
    { 
     [Embed(source="assets/jellyfish.jpg")] 
     private var JellyfishImage:Class; 


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

     }// end function 

     private function init(e:Event = null):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 

      var jellyfishImage:Bitmap = Bitmap(new JellyfishImage()); 

      var bubble:Bubble = new Bubble(); 
      bubble.addChild(jellyfishImage); 

      addChild(bubble); 

     }// end function 

    }// end class 

}// end package 

Bubble.as:

package com.flashdevelopprojects.display 
{ 
    import flash.display.Bitmap; 
    import flash.display.DisplayObject; 
    import flash.display.Shape; 
    import flash.display.Sprite; 

    public class Bubble extends Sprite 
    { 
     [Embed(source="../assets/bubble.jpg")] 
     private var BubbleImage:Class; 

     private var _bubbleImage:Bitmap; 
     private var _mask:Shape; 
     private var _content:Sprite; 

     public function Bubble() 
     { 
      init(); 

     }// end function 

     private function init():void 
     { 
      _content = new Sprite(); 
      super.addChild(_content); 

      _bubbleImage = Bitmap(new BubbleImage()); 
      _bubbleImage.alpha = 0.5; 
      super.addChild(_bubbleImage); 

      _mask = new Shape(); 
      _mask.graphics.beginFill(0x000000); 
      _mask.graphics.drawCircle(125, 125, 125); 
      _mask.graphics.endFill(); 
      super.addChild(_mask); 

      mask = _mask; 

     }// end function 

     override public function addChild(child:DisplayObject):DisplayObject 
     { 
      child.width = 250; 
      child.height = 250; 
      child.alpha = 0.5; 
      return _content.addChild(child); 

     }// end function 

    }// end class 

}// end package 

Здесь изображение работающем флэш-приложения:

enter image description here

+0

спасибо. Хорошо. Но моя маска - это что-то труднее сделать с помощью программы. Так что я экспортирую из флеш-библиотеки. Основываясь на моем qn, ваш ответ правильный. Прямо сейчас моя проблема заключается в изменении цвета пузыря, зависит от цвета «mask_mc». –

0

Я думаю, что вы, возможно, забыли о добавлении пузыря на свою стадию (или другой контейнер) - stage.addChild(bubble);, а затем установить его как маску другого мувика.

+0

Я использовал контейнер movieClip, названный как «cont_mc» для добавления пузыря. и я тоже пробовал этап, но не работал. –

0

При работе с масками рекомендуется устанавливать как маску и maskee кэшировать как растровые изображения перед установкой маски:

bubble.cacheAsBitmap = true; 
Layer_mc.cacheAsBitmap = true; 
Layer_mc.mask = bubble; 
+0

nope .................... –

0

Приведенный ниже код будет добавить только один пузырь (последний) в качестве маски.

for (var i:uint = 0; i < noOfBubbles; i++) { 
    var bubble:Bubble = new Bubble(); 
    bubbles.push(bubble); 
    Layer_mc.mask = bubble; 
    //i have used ENTER_FRAME handler for animation   
} 

Вам необходимо добавить пузырьки в контейнер и использовать его в качестве маски.

var theMask = new Sprite(); 
for (var i:uint = 0; i < noOfBubbles; i++) { 
    var bubble:Bubble = new Bubble(); 
    theMask.addChild(bubble); 
    bubbles.push(bubble); 
    //i have used ENTER_FRAME handler for animation   
} 
Layer_mc.mask = theMask; 
Смежные вопросы