• [Embed(source="asset.swf")] 使用其中的所有资源


    AS3中,我们可以使用

    [Embed(source="asset.swf", symbol="symbol")]
    private var symbolClass:Class;
    
    var symbol:MovieClip = new symbolClass();
    

    从艺术中嵌入一个符号的SWF在什么可能是一个代码构建的SWF这是伟大的,但如果你要嵌入整个SWF

    [Embed(source="asset.swf")]
    private var assetClass:Class;
    
    var asset:MovieClip = new assetClass();
    

    看起来像它应该做的伎俩,但你不能在资产中获得的任何信息。这是一个真正的痛苦,因为这是非常令人费解的原因。我想起了解决这个问题,在过去的工作,并愉快地设法挖掘一个长期被遗忘的宝藏在我的代码库,我想我会分享(已经迅速重构它以使用AS3-信号,自然)。

    package com.alecmce.util
    {
    	import org.osflash.signals.Signal;
    
    	import mx.core.MovieClipAsset;
    
    	import flash.display.Loader;
    	import flash.display.LoaderInfo;
    	import flash.display.MovieClip;
    	import flash.events.Event;
    
    	public class UnpackEmbed
    	{
    		private var _ready:Signal;
    
    		private var _asset:MovieClipAsset;
    		private var _content:MovieClip;
    
    		public function UnpackEmbed(assetClass:Class)
    		{
    			_asset = new assetClass();
    			_ready = new Signal(UnpackEmbed);
    
    			var loader:Loader = Loader(_asset.getChildAt(0));
    			var info:LoaderInfo = loader.contentLoaderInfo;
    			info.addEventListener(Event.COMPLETE, onLoadComplete);
    		}
    
    		private function onLoadComplete(event:Event):void
    		{
    			var info:LoaderInfo = LoaderInfo(event.target);
    			info.removeEventListener(Event.COMPLETE, onLoadComplete);
    
    			_content = MovieClip(info.loader.content);
    			_ready.dispatch(this);
    		}
    
    		public function get content():MovieClip
    		{
    			return _content;
    		}
    
    		public function get ready():Signal
    		{
    			return _ready;
    		}
    
    		public function get asset():MovieClipAsset
    		{
    			return _asset;
    		}
    	}
    }
    

    当您嵌入的SWF以这种方式,然后实例化它,闪存莫名其妙密谋建立一个MovieClipAsset装载机内,这将是'加载'已嵌入的内容。内容不是立即可用(也可能是有时候,我也遇到过的情况下它不是),所以你必须等待Event.COMPLETE被解雇之前,您可以访问它。此类公开,通知您当内容准备就绪的信号。它可能可以更严格,例如,包括在isComplete标志,但它提供我的目的,以下面的方式使用时:

    [Embed(source="asset.swf")]
    private var assetClass:Class;
    
    asset = new UnpackEmbed(assetClass);
    asset.ready.addOnce(onAssetReady);
    
    private function onAssetReady(asset:UnpackEmbed):void
    {
    	// now we can access the asset.content!
    }
  • 相关阅读:
    python 序列应用
    跨浏览器本地存储框架(store.js/USTORE.js/Box.js)
    【设计开发命名必备】英语单词缩写规则
    Web服务器性能估算
    Spring整合FreeMarker本地化动态设置
    mybatis注解详解
    两种Freemarker模板路径设置方法
    Drools5集成Spring3
    Oracle 时间戳生成语句(秒级+毫秒级)
    Drools动态加载规则文件
  • 原文地址:https://www.cnblogs.com/zhepama/p/3467203.html
Copyright © 2020-2023  润新知