可以使生活通過創建一個自動處理掩蔽邏輯自己的顯示對象容器類更容易。下面是一個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](https://i.stack.imgur.com/tsWza.jpg)
不要忘記了'mask_mc'添加到顯示列表。在某些特殊情況下(alpha掩碼),您需要將'cacheAsBitmap = true'設置爲展臺剪輯。 – DanielB 2011-05-07 08:17:53
謝謝,添加到示例代碼。 – CookieMonster 2011-05-07 08:21:52
因此,在初學者中,這是掩蓋原始動畫片段,然後將其放入新的動畫片段? – SteveU 2011-05-07 08:24:25