ActionScript和js交互

 

新建的ActionScript项目,默认新建会在“默认包”中创建一个和项目名称相同以as结尾的文件,as项目开始执行时要new一个这样的类在类上方加入一些参数可以为生成的swf初始化一些样式

[SWF(width=’1150’,height=’700’,backgroundColor=’0x000000’,frameRate=’20’)] // 初始化屏幕为黑色

 

如果该类有构造方法则会执行构造方法。

使用EventDispatcher对象注册事件监听器对象,以使用监听器能够接收事件通知。可以为特定类型的事件、阶段和优先级在显示列表中的所有节点注册事件监听器。

成功注册一个事件监听器,无法通过额外条用addEventListener()来更改其优先级。要更改监听器的优先级,必须首先调用removeListener().然后,可以使用新的优先级再次注册监听器。

请记住,注册该侦听器后,如果继续调用具有不同 type 或 useCapture 值的 addEventListener(),则会创建单独的侦听器注册。例如,如果首先注册 useCapture 设置为 true 的侦听器,则该侦听器只在捕获阶段进行侦听。如果使用同一个侦听器对象再次调用 addEventListener(),并将 useCapture 设置为 false,那么便会拥有两个单独的侦听器:一个在捕获阶段进行侦听,另一个在目标和冒泡阶段进行侦听。

不能只为目标阶段或冒泡阶段注册事件侦听器。这些阶段在注册期间是成对出现的,因为冒泡阶段只适用于目标节点的始祖。

如果不再需要某个事件侦听器,可调用 removeEventListener() 删除它,否则会产生内存问题。事件侦听器不会自动从内存中删除,因为只要调度对象存在,垃圾回收器就不会删除侦听器(除非 useWeakReference 参数设置为 true)。

复制 EventDispatcher 实例时并不复制其中附加的事件侦听器。(如果新近创建的节点需要一个事件侦听器,必须在创建该节点后附加该侦听器。)但是,如果移动 EventDispatcher 实例,则其中附加的事件侦听器也会随之移动。

如果在正在处理事件的节点上注册事件侦听器,则不会在当前阶段触发事件侦听器,但会在事件流的稍后阶段触发,如冒泡阶段。

如果从正在处理事件的节点中删除事件侦听器,则该事件侦听器仍由当前操作触发。删除事件侦听器后,决不会再次调用该事件侦听器(除非再次注册以备将来处理)。

参数:

type 事件的类型。

listener 处理事件的侦听器函数。此函数必须接受 Event 对象作为其唯一的参数,并且不能返回任何结果,如下面的示例所示: function(evt:Event):void

函数可以有任何名称。

useCapture 确定侦听器是运行于捕获阶段还是运行于目标和冒泡阶段。如果将 useCapture 设置为 true,则侦听器只在捕获阶段处理事件,而不在目标或冒泡阶段处理事件。如果 useCapture 为 false,则侦听器只在目标或冒泡阶段处理事件。要在所有三个阶段都侦听事件,请调用 addEventListener 两次:一次将 useCapture 设置为 true,一次将 useCapture 设置为 false。

priority 事件侦听器的优先级。优先级由一个带符号的 32 位整数指定。数字越大,优先级越高。优先级为 n 的所有侦听器会在优先级为 n -1 的侦听器之前得到处理。如果两个或更多个侦听器共享相同的优先级,则按照它们的添加顺序进行处理。默认优先级为 0。

useWeakReference 确定对侦听器的引用是强引用,还是弱引用。强引用(默认值)可防止您的侦听器被当作垃圾回收。弱引用则没有此作用。

类级别成员函数不属于垃圾回收的对象,因此可以对类级别成员函数将 useWeakReference 设置为 true 而不会使它们受垃圾回收的影响。如果对作为嵌套内部函数的侦听器将 useWeakReference 设置为 true,则该函数将作为垃圾回收并且不再是永久函数。如果创建对该内部函数的引用(将该函数保存到另一个变量中),则该函数将不作为垃圾回收并仍将保持永久。

[只读]显示对象的舞台。Flash运行时应用程序仅包含一个Stage对象。例如,您可以创建多个显示对象并加载到显示列表中,每个显示对象的stage属性是指相同Stage对象(即使显示对象属性已知加载SWF文件)。

如果显示对象未添加到显示列表,则其stage属性会设置为null。

Sprite类是基本显示列表构造块:一个可显示图形并且也可包含子项的显示列表节点。

Sprite 对象与影片剪辑类似,但没有时间轴。Sprite 是不需要时间轴的对象的相应基类。例如,Sprite 将是通常不使用时间轴的用户界面 (UI) 组件的逻辑基类。

Sprite 类是 ActionScript 3.0 中新引入的类。它提供了 MovieClip 类功能的替代功能,此替代功能保留了 ActionScript 以前版本的所有功能以提供向后兼容性。

 

AS读取XML文件

定义类ConfigurationProxy类 实现读取XML文件的功能。

导入的包:

import flash.display.Sprite;

import flash.events.*;

import flash.events.EventDispatcher;

import flash.events.IEventDispatcher;

import flash.net.*;

import flash.text.TextField;

import flash.utils.*;

实现的类

public class ConfigurationProxy extends Sprite

    {

        private var appXml:XML;

        private var loader:URLLoader;

        static public var request:String;

        static public var port:Number;

        static public var interval:Number;

        static public var physScale:Number;

       

        public function ConfigurationProxy()//配置文件初始化方法

        {

            //TODO: implement function

            super();

            loader = new URLLoader();

            loader.load(new URLRequest("application.xml?" + getTimer()));//加载xml文件

            loader.addEventListener(Event.COMPLETE, completeHandler);

            loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

            loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);

 

        }

        public function completeHandler(e:Event):void

        {

            appXml          = new XML(loader.data);

            port            = Number(appXml.Application.port);

            request         = appXml.Application.request;

            interval        = Number(appXml.Application.interval);

            physScale       = Number(appXml.Application.physScale);

            this.dispatchEvent(new Event(Event.COMPLETE));

        }

       

        public function ioErrorHandler(e:IOErrorEvent):void

        {

            //404

            this.dispatchEvent(new IOErrorEvent(IOErrorEvent.IO_ERROR));

        }

        private function securityErrorHandler(event:SecurityErrorEvent):void

        {

            trace("securityErrorHandler: " + event);

        }

    }

 

 

As与js交互:

主要使用的是ExternalInterface.call(“”)//调用js的函数返回js返回的值。

ExternalInterface 类是用来支持在ActionScript和SWF容器(例如,含有javascript的HTML页或使用Flash Player 播放SWF文件的桌面应用程序)之间进行直接通信的应用程序编程。

 通过ExternalInterface类,您可以在Flash运行时中使用HTML页面中的javascript调用ActionScript函数可以返回一个值,javascript会立即接收它作为该调用的返回值。

此功能替代fscommand()方法。

ExternalInterface 类要求用户的 Web 浏览器支持 ActiveX® 或由某些浏览器公开的 NPRuntime API 以实现插件脚本处理。即使上面未列出浏览器和操作系统组合,如果它们支持 NPRuntime API,则它们也应该支持 ExternalInterface 类。请访问 http://www.mozilla.org/projects/plugins/npruntime.html。

注意:在将 SWF 文件嵌入到 HTML 页中时,请确保设置 id 属性,并且 object 和 embed 标签的 id 和 name 属性不包含以下字符:

 . - + * / \

关于 Flash Player 应用程序的注意事项:Flash Player 版本 9.0.115.0 和更高版本允许。在 id 和 name 属性中使用 .(句点)字符。

关于 Flash Player 应用程序的注意事项:在运行于浏览器中的 Flash Player 10 和更高版本中,以编程方式使用此类打开弹出窗口可能会失败。不同的浏览器(和浏览器配置)可能会随时阻止弹出窗口;不能保证可以显示任何弹出窗口。不过,为了尽可能成功,请仅在作为用户操作的直接结果执行的代码中使用此类打开弹出窗口(例如,在鼠标单击或按键事件的事件处理函数中)。

利用 ActionScript,可以在 HTML 页上执行以下操作:

  • 调用任何 JavaScript 函数。
  • 传递任意数量、具有任意名称的参数。
  • 传递各种数据类型(Boolean、Number、String 等等)。
  • 接收来自 JavaScript 函数的返回值。

通过在 HTML 页上使用 JavaScript,可以:

  • 调用 ActionScript 函数。
  • 使用标准的函数调用表示法传递参数。
  • 将值返回给 JavaScript 函数。

关于 Flash Player 应用程序的注意事项:当前,Flash Player 不支持在 HTML 表单内嵌入的 SWF 文件。

关于 AIR 应用程序的注意事项:在 Adobe AIR 中,ExternalInterface 类可用于在以下二者之间通信:一是在 HTMLLoader 控件中加载的 HTML 页面中的 JavaScript,一是在此 HTML 页面中嵌入的 SWF 内中的 ActionScript。

 

 

 

 

 

 

 

posted on 2013-07-01 13:17  刀锋诚心  阅读(655)  评论(0编辑  收藏  举报