- 浏览: 45422 次
- 性别:
- 来自: 河北
最新评论
/** * * 6dn Avm1Loader *---------------------------------------------------------------- * @notice 6dn Avm1Loader类 * @author 6dn * @as version3.0 * @date 2009-5-26 * * AUTHOR ****************************************************************************** * * authorName : 黎新苑 - www.6dn.cn * QQ :160379558(小星@6dn) * MSN :xdngo@hotmail.com * email :6dn@6dn.cn * webpage : http://www.6dn.cn * * LICENSE ****************************************************************************** * * ① 此类是基于Loader扩展! * ② 支持以as2.0版本的flash,可使用加载进来的swf中任何位置的function(只支持调用function); * ③ 注意:由于使用LocalConnection在同一时间内connetID会出现冲突,所以请不要并发使用。 * ④ 此类作为开源使用,但请重视作者劳动成果,请使用此类的朋友保留作者信息。 * Please, keep this header and the list of all authors * */ package com{ import flash.net.LocalConnection; import flash.display.Loader; import flash.events.Event; import flash.events.StatusEvent; import flash.utils.ByteArray; public class Avm1Loader extends Loader { private var avmLC:LocalConnection = new LocalConnection(); private var avm1LC:LocalConnection = new LocalConnection(); private var avm2LC:LocalConnection = new LocalConnection(); private const AVM_SER:String="6DN_Avm_server"; private var AVM1_SER:String="6DN_Avm1_server"; private var AVM2_SER:String="6DN_Avm2_server"; private var AVM1_URL:String; private var SER_code:String; private const EVENT_LOADED:String="Avm1Loaded"; private const EVENT_LOADPROGRESS:String="Avm1LoadProgress"; private var Avm1Precent:Number; private var intervalId:uint; private const str:String="Q1dTCWoGAAB4nLVT3VLTQBQ+SVO6/AlUpChBRCoqIlguvKoKFiyMpdXgeJsJ7VJa02wnSSs8gV5xmRnHccZn8C18FJ+inrNbKB2Kd+Zik/N95+fbb7MnELcBJn4CjGmwPQX45PROp/MqtjkE8PWXloEj16m+5acgDutFp8EhjR8QOn6Vh+AKp1I6rPNyCLYvRAhB062FUBc1D8LjWkBFgKkBHLU8WKPVox4u96rhMTjNpnsKTrtRyEHZFQGHrY/7G/bBjgXPt4v2VruxYQfcb3PfBrsh2jUOZZ87Id9pNMPTfQJybq0JtivKn+R8EiRxEN6OF3L/jU/zUOvr05AHBaR55SL8IELHpfkZIt75ourzICBgAxUF3KtckFiF2i5L6yojOCPxgig7bk54HtpRE54qzYEnPsM2aoYg9Gnyrmj5Adj0uV/zWiiDPg94WXiVQKGuWwu6cXdY5sKHshqgdoq2NZTG7lyU+X1cgpo6qBdapAMDM5n8oUMcIg1iLyMDmMZ0k5hYMRslKTQSGh4+i6uXJskhi9aENd+XwganYNNhBM0sfY10249ge3wNmwSOdmvG8rSqhPFi3izJTBneKEZxkP13SfAcRKMwBN2H2mDOqJX6pkMFBlXtUdXKOTXcqy1GCZXR12ThPJOBntAvsUVaJ6zU2cK50eheHWLplu+CkcbDsMuiwuGP1idwUlZPWaloCFiS3TSM/Hw0A2y6l2LIOYbGblnSmmlpzUxcK6FcI6Y0Tss+KexjUOrsGaPaWB1O+uepvNsWbb+CwNgA9o41PvtFAz01kKNKvO8dadx7QN04D5Qa2ZLNsaRJ5sUoMGXZvBTG7nYZvZ+JS8l6Cf39DYOHXjqYvWSBRq/CIH24s0H1/0esKRvq1/QoURO8QfL3XmD35OEtbtGa3IrG8ex7Ou9vZglZuoKYV5B0D3mgkOUekpbDH8or9ijfZ4WiHlv5a7mVf3BPrHyWftFFtsqWTfxHaS/mxRVZkklP0R5dBrjjNbam7qkK19m6Cpdl+Iwt9CybPLcMNjH8CwprKeg="; private var bytearray:ByteArray; public function Avm1Loader():void { bytearray=new Base64(str); } public function Load($url:String):void { AVM1_URL=$url; SER_code=getRndCode(AVM1_URL); AVM2_SER=AVM2_SER+"_"+SER_code; try { avm2LC.connect(AVM2_SER); } catch (error:ArgumentError) { trace("error on avm2LC connection"); } avm2LC.client=this; this.loadBytes(bytearray); this.contentLoaderInfo.addEventListener(Event.COMPLETE,eventHandler); } private function eventHandler(evt:Event):void { this.contentLoaderInfo.removeEventListener(Event.COMPLETE,eventHandler); try { avmLC.connect(AVM_SER); } catch (error:ArgumentError) { trace("error on avmLC connection"); } avmLC.client=this; } private function onStatus(event:StatusEvent):void { switch (event.level) { case "status" : trace("LocalConnection.send() succeeded"); break; case "error" : trace("LocalConnection.send() failed"); break; } } public function avm1Connected($str:String):void { trace("connect"); avmLC.close(); AVM1_SER=AVM1_SER+"_"+$str; trace(AVM1_SER); avm1LC.send(AVM1_SER, "loadMC", AVM1_URL, SER_code); avm1LC.addEventListener(StatusEvent.STATUS, onStatus); } public function avm1LoadProgress($percent:Number):void { Avm1Precent=$percent; dispatchEvent(new Event(EVENT_LOADPROGRESS)); } public function avm1Loaded():void { //trace("loaded"); dispatchEvent(new Event(EVENT_LOADED)); } public function avm1Execute($obj:Object):void { avm1LC.send(AVM1_SER, "cmd", $obj); } private function getRndCode($url:String):String { var len:Number=$url.length; var tmpstr:String=len<8?$url+"6dn_avm1_ser"+Math.random()*1000:$url; len=tmpstr.length; var mystr:String=tmpstr.charAt(int(Math.random()*len))+tmpstr.charAt(int(Math.random()*len))+tmpstr.charAt(int(Math.random()*len))+tmpstr.charAt(int(Math.random()*len))+tmpstr.charAt(int(Math.random()*len))+tmpstr.charAt(int(Math.random()*len))+tmpstr.charAt(int(Math.random()*len))+tmpstr.charAt(int(Math.random()*len)); return mystr; } public function get Complete():String { return EVENT_LOADED; } public function get Progress():String { return EVENT_LOADPROGRESS; } public function get loadedprecent():Number { return Avm1Precent; } } } import flash.utils.ByteArray; internal class Base64 extends ByteArray { private static const BASE64:Array = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,0,0,0,63,52,53,54,55,56,57,58,59,60,61,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,0,0,0,0,0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,0,0,0,0,0]; public function Base64(str:String):void { var n:int, j:int; for (var i:int = 0; i < str.length && str.charAt(i) != "="; i++) { j = (j << 6) | BASE64[str.charCodeAt(i)]; n += 6; while (n >= 8) { writeByte((j >> (n -= 8)) & 0xFF); } } position = 0; } }
引用
自己使用时的代码
var myloader:Avm1Loader=new Avm1Loader(); myloader.Load("测试.swf"); myloader.addEventListener(myloader.Progress,LoadProgressHand); myloader.addEventListener(myloader.Complete,LoadedHand); myloader.x=25; myloader.y=40; function LoadProgressHand(evt:Event):void { //txt.text="Loading:"+myloader.loadedprecent.toString()+"%"; } function LoadedHand(evt:Event):void { //txt.text="Load Complete!"; var obj=(evt.target); stage.addChild(obj); myloader.avm1Execute({target:"_root",funname:"gotoAndStop", args:["10"]});//停留在第十帧 }
发表评论
-
反射的方法:访问库里的元件的方法
2011-09-21 17:44 931package net.smilecn{ ... -
BulkLoader
2010-08-12 09:37 1330BulkLoader是一个不错且使用简单的开源加载类,其能实现 ... -
一个载入SWF和图片到数组的loader
2010-08-12 09:15 1005com.paizi,这个没用可以删掉。给自己留个地方,怕以后忘 ... -
载入外部图片作为背景平铺,MC剧中的方法
2010-07-28 16:47 1539FLASH AS3 载入外部图片作为背景平铺,MC剧中的方法。 ... -
Unloading SWFs: Loader.unload() versus Loader.unloadAndStop() Methods
2010-07-27 11:02 2903内存确实释放了一部分 ... -
As3.0 删除容器所有子对象
2010-07-27 10:05 2471经过查询了资料发现了删除容器的所有子对象也有这样的学问啊。原来 ... -
可以将基于AVM1Movie的SWF编码成 as3的MovieClip的类
2010-07-07 17:12 3226使用方法在注释中 /* * ForcibleLoade ...
相关推荐
随着技术的发展,AVM经历了从AVM1到AVM2的重大升级,以支持更强大的功能和性能提升。AVM2的开源使得开发者和研究人员有机会深入理解其内部工作原理,对ActionScript的优化和自定义实现提供了无限可能。 AVM2的设计...
它不仅提供了比前代AVM更高效的性能,还引入了对现代编程语言特性的支持,如垃圾回收、类型安全和多线程。 #### 重要概念 AVM2的设计基于几个核心概念,包括常量值、虚拟机结构、命名机制、方法调用以及指令集。 ...
相比于前一代的AVM1(主要针对AS1和AS2),AVM2在设计上有了显著改进,尤其是在性能方面。它采用了JIT(Just-In-Time)编译技术与解释器相结合的方式,这种混合执行模式极大地提高了代码执行效率。 #### JIT与解释...
AVM2 的出现是为了克服早期版本的ActionScript(如AS1和AS2)在性能和功能上的限制。 #### 二、ActionScript Virtual Machine 结构 ##### 2.1 常量值 AVM2 使用一系列预定义的常量值来帮助解释和执行脚本。这些...
flash的虚拟机源码-AVM2 avmplus Adobe System Incorporated
AVM有两种版本:AVM1和AVM2,其中AVM2是更为先进的一种,支持ActionScript 3.0。 1. **AVM2架构** - **ABCLoad**:加载ABC(ActionScript ByteCode)数据到内存,并进行解析,获取所有数据单元,如Script、Class、...
### AVM2电子书核心知识点概述 #### 一、引言 **AVM2电子书**作为一本理想的参考书籍,不仅适用于专业人士也适用于学生群体,它提供了深入且实用的视角来探讨ActionScript虚拟机(AVM)的核心概念和技术细节。本书...
1. **AVM组件模型**:AVM定义了一组预定义的组件模板,如Agent、Driver、Sequencer、Monitor等,这些组件可以相互协作完成验证任务。书中会解释每个组件的作用和它们之间的交互机制。 2. **接口与连接**:AVM提供了...
1. **字节码解析**:AVM2使用字节码作为中间表示,这使得代码可以在不同的平台上运行。字节码解析器负责将二进制的字节码转换为可执行的指令。 2. **类加载机制**:AVM2管理着类的生命周期,包括加载、链接和初始化...
- **相关知识回顾**: 漏洞攻击四层模型(FlashSky)是一种评估和理解AVM2逃逸机制的理论框架,它帮助研究人员更好地识别和利用AVM2中的漏洞。AVM2的运行环境被称为“寄生”模式,即AVM2通常作为插件或组件运行在其他...
Ansible Version Manager(AVM)是针对Ansible的扩展,旨在更好地管理和控制Ansible的版本,确保在不同环境中的一致性和可靠性。这个名为"Ansible-avm.zip"的压缩包可能包含了AVM的源代码或者安装脚本,便于用户集成...
从给定的文件信息来看,我们正在探讨的主题是“计数问题”,具体而言,这是一个与AVM(一种可能指的是Algorithm Visualization Media或者特定编程竞赛的缩写)竞赛练习相关的C语言基础算法实例。这个实例主要涉及在...
在电子工程领域,对电流、电压和磁通密度的精确测量至关重要,这通常通过使用专业的测量设备——安培-伏特-米(AVM)来实现。本文将深入探讨如何利用微控制器,特别是PIC系列控制器,来构建一个自定义的AVM系统。 ...
PIAB真空泵P6010AVM选型册介绍了PIAB公司推出的P6010AVM真空泵产品,该产品采用了专利的COAX®技术。COAX®技术是一种先进的真空产生技术,能够提供可靠的真空吸附力量和高效的气流控制,特别适合于需要大量大吸盘的...
士研电机保护继电器AVM-NB说明书pdf,士研电机保护继电器AVM-NB说明书:相位顺序不对(逆相)及电压过高或电压不足时自动跳脱保护,设定值可以从额定电压的±5%到±29%,如果电压超过或是不足,内部继电器立即回到原始...
AVM系统的主要功能是提供驾驶员一个完整的汽车周围环境信息,帮助驾驶员更好地观察汽车周围的情况,从而避免意外事件的发生。同时,AVM系统也可以为基于图像的汽车电子技术提供基础平台,如车道偏离预警、行人防撞、...
avm2-learn-doc 学习整理AVM2(Actionscript Virtual Machine)相关知识。主要参考,内容为该文档对应章节的翻译和转述。 主要内容为: 加载、连接、验证、执行 ABC字节码格式 AVM2指令
**AVM内外参介绍** 在计算机视觉和图像处理领域,AVM(Automotive Vision System,汽车视觉系统)是一种用于车辆导航、自动驾驶以及辅助驾驶的重要技术。它通过车载摄像头捕获环境信息,然后进行图像处理,以实现对...
AVM有两种版本:AVM1和AVM2。AVM1是早期Flash Player中的版本,支持ActionScript 2;而AVM2是随着Flash Player 9引入的,专为ActionScript 3设计,提供了更高效、更强大的性能和类型检查。 HTML,或超文本标记语言...