2011-05-07 21 views
0

我寫,看起來到一個XML文件,並在翻出了圖像的應用程序。我想拉出原始圖像並動態地爲它們應用遮罩。的Flash AS3應用口罩,多張圖片

正如你可以看到下面我創建一個空白的影片剪輯,並把圖像轉換成它..在這一點上我想創建的面具。

var thumbLdr:Loader = new Loader(); 
    var thumbURLReq:URLRequest = new URLRequest(galleryDir + thumb); 
    thumbLdr.load(thumbURLReq); 
    // Create MovieClip holder for each thumb; 
    //var thumbArray = new Array() 
    var thumb_mc = new MovieClip(); 
    thumb_mc.addChild(thumbLdr); 
    addChildAt(thumb_mc, i); 

任何幫助,我將不勝感激

問候

回答

0

的影片剪輯有.mask屬性,它可以設置爲其他影片剪輯。

addChild(mask_mc); 
thumb_mb.mask = mask_mc; 

其中mask_mc顯然是mask movieclip。

+0

不要忘記了'mask_mc'添加到顯示列表。在某些特殊情況下(alpha掩碼),您需要將'cacheAsBitmap = true'設置爲展臺剪輯。 – DanielB 2011-05-07 08:17:53

+0

謝謝,添加到示例代碼。 – CookieMonster 2011-05-07 08:21:52

+0

因此,在初學者中,這是掩蓋原始動畫片段,然後將其放入新的動畫片段? – SteveU 2011-05-07 08:24:25

1

可以使生活通過創建一個自動處理掩蔽邏輯自己的顯示對象容器類更容易。下面是一個Flash應用程序,我提出來證明這一點:

image.xml:

<images> 
    <image name="Chrysanthemum" url="images/Chrysanthemum.jpg" /> 
    <image name="Desert" url="images/Desert.jpg" /> 
    <image name="Hydrangeas" url="images/Hydrangeas.jpg" /> 
    <image name="Jellyfish" url="images/Jellyfish.jpg" /> 
    <image name="Koala" url="images/Koala.jpg" /> 
    <image name="Lighthouse" url="images/Lighthouse.jpg" /> 
    <image name="Penguins" url="images/Penguins.jpg" /> 
    <image name="Tulips" url="images/Tulips.jpg" /> 
</images> 

Main.as:

package 
{ 
    import flash.display.Bitmap; 
    import flash.display.Loader; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.net.URLLoader; 
    import flash.net.URLRequest; 
    import flash.display.LoaderInfo; 

    public class Main extends Sprite 
    { 
     private var _xmlUrl:String = "xml/images.xml"; 
     private var _xml:XML; 
     private var _bitmaps:Vector.<Bitmap> 
     private var _bitmapsLoaded:int; 

     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); 

      _bitmaps = new Vector.<Bitmap>(); 

      loadXml(); 

     }// end function 

     private function loadXml():void 
     { 
      var urlLoader:URLLoader = new URLLoader(new URLRequest(_xmlUrl)); 
      urlLoader.addEventListener(Event.COMPLETE, onUrlLoaderComplete); 

     }// end function 

     private function onUrlLoaderComplete(e:Event):void 
     { 
      _xml = XML(URLLoader(e.target).data); 

      loadBitmaps(); 

     }// end function 

     private function loadBitmaps():void 
     { 
      for (var i:uint = 0; i < _xml.children().length(); i++) 
      { 
       var loader:Loader = new Loader(); 
       loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete); 
       loader.load(new URLRequest(_xml.children()[i][email protected])); 

      }// end for 

     }// end function 

     private function onLoaderComplete(e:Event):void 
     { 
      _bitmaps.push(Bitmap(LoaderInfo(e.target).content)) 

      if (_xml.children().length() == ++_bitmapsLoaded) addMaskImages(); 

     }// end function 

     private function addMaskImages():void 
     { 
      var row:int = 2; 
      var column:int = 4; 
      var index:int = 0; 
      var maskShapePosition:Number = 200; 
      var maskShapeSize:Number = 200; 

      for (var i:int = 0; i < row; i++) 
      { 
       for (var j:int = 0; j < column; j++) 
       { 
        var maskedImage:MaskedImage = new MaskedImage(_bitmaps[index++], maskShapePosition, maskShapePosition, maskShapeSize, maskShapeSize); 
        maskedImage.x = j * maskShapeSize; 
        maskedImage.y = i * maskShapeSize; 
        addChild(maskedImage); 

       }// end for 

      }// end for 

     }// end function 

    }// end class 

}// end package 

import flash.display.DisplayObject; 
import flash.display.Shape; 
import flash.display.Sprite; 

internal class MaskedImage extends Sprite 
{ 
    private var _maskShape:Shape; 
    private var _image:DisplayObject; 

    public function get image():DisplayObject { return image } 
    public function get maskShape():Shape {return _maskShape } 

    public function MaskedImage(image:DisplayObject, maskShapeX:Number, maskShapeY:Number, maskShapeWidth:Number, maskShapeHeight:Number) 
    { 
     _image = image; 
     _image.x -= maskShapeX; 
     _image.y -= maskShapeY; 
     addChild(_image); 

     _maskShape = new Shape(); 
     _maskShape.graphics.beginFill(0x000000); 
     _maskShape.graphics.drawRect(0, 0, maskShapeWidth, maskShapeHeight); 
     _maskShape.graphics.endFill(); 
     addChild(_maskShape); 

     this.mask = _maskShape; 

    }// end function 

}// end package 

以下是應用程序運行的圖像:

enter image description here

0

有兩種方法可以將掩碼添加到的DisplayObject。有一點要記住的是,你不能將掩碼設置爲多個剪輯運行時。使用容器。

  1. 時間軸方式 添加一個影片剪輯時間軸中的,並給它一個實例名稱(如thumbMask)。剪輯應該包含圖形,如果它具有漸變,它應該在檢查器面板中設置爲cacheAsBitmap。然後在縮略圖的新圖層上添加一個持有人displayobject。這是您想要在循環中添加圖像的剪輯。接下來,右鍵單擊遮罩層並單擊遮罩。確保夾子遮蓋固定器層。如果您不熟悉圖層蒙版,只需詢問Google。

  2. 腳本方式 可以使用與上述相同的或運行時創建掩模。然後應用這樣的面具:

thumbHolder.mask = thumbMask; thumbHolder.cacheAsBitmap = true; thumbMask.cacheAsBitmap = true;