利用flash.system.Capabilities来检测,Capabilities提供一些属性,这些属性描述了承载 SWF 文件的系统和播放器的特征,
通过使用Capabilities对象来确定用户所拥有的设备的类型,如果熟悉设备的功能,则可以通知服务器发送合适的 SWF 文件,或是通知 SWF 文件变更其播放方式,从而获得良好的效果。言归正传,下面是一段代码,用来实现获取flashplayer版本信息: var versionString:String = Capabilities.version; var pattern:RegExp = /^(\w*) (\d*),(\d*),(\d*),(\d*)$/; var result:Object = pattern.exec(versionString); if (result != null) { trace(“input: ” + result.input); trace(“platform: ” + result[1]); trace(“majorVersion: ” + result[2]); trace(“minorVersion: ” + result[3]); trace(“buildNumber: ” + result[4]); trace(“internalBuildNumber: ” + result[5]); } 其中的plarform为播放器运行平台,其中的可能值是WIN、MAC以及UNIX. 其中的majorVersion为主版本号,minorVersion为次版本号,buildNumber为生成版本号,internalBuildNumber为内部生成版本号。 例如一个完整的版本信息可能是WIN 9,0,0,0,是一个win平台上运行的9.0版本的flashplayer。
IE6+gzip+flash+(no-cache) == nightmare
继上次祈福活动之后,公益活动再次出现在IE6用flash取后台数据,gzip压一下,然后response头里cache control设了no-cache肯定flash里显示不成功,抓包也没问题,返回的数据都是正确的,到了flash里就异常。而且很诡异的是不是所有的IE6都出问题。 解决的办法也很诡异有两种思路: 1.去gzip压缩,nginx里面可以配置对某一特定浏览器版本禁用gzip压缩。 2.设置 Cache-control: max-age=1或更小的值,反正不能用 Cache-control:no-cache,加个response头 Expires: 1970.1.1。 具体原因还要继续研究,可以肯定的是服务器能正常处理,但是在IE6下flash无法接受到服务器返回的信息。
将编译AS3区分Debug版本和Release版本(转)
原文链接:http://www.xiaos8.com/article.asp?id=556 首先我们区分AS3的编译版本,目的是让同样的code,如果使用debug编译,则会含有很多测试代码方便调试;如果使用release编译,则不会将调试代码编译进去。 用过Visual Studio(以下简称VS)的程序员都知道,VS在编译时有个debug和release的选项,而flash builder(以下简称fb)在编译时,虽然可以选择不同路径编译,但无法像VS那样真正的区分编译版本。 下面我依然要说,fb的确没办法像VS那样真正的去区分版本进行编译,但fb可以条件编译! 什么是条件编译 一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”。 接下来看看,我们怎么样使用条件编译来完成区分编译Debug版本和Release版本: 1、首先来看一段代码: [cc lang="actionscript"] package { import flash.display.Sprite; public class TestBuild extends Sprite { CONFIG::debug public function TestBuild() { graphics.beginFill(0xff0000,1); graphics.drawRect(0,0,100,100); } CONFIG::release public function TestBuild() { graphics.beginFill(0x0000ff,1); graphics.drawRect(0,0,100,100); } } } [/cc] 2、TestBuild有两个构造函数,不同的是一个构造函数上有CONFIG::debug,一个有CONFIG::release; 通过理解,如果是debug编译画出来的是红色的正方形,而release编译是蓝色正方形。 3、然后我们使用mxmlc命令行对这段代码进行debug编译 mxmlc src/TestBuild.as -define=CONFIG::debug,true -define=CONFIG::release,false -output bin-release/TestBuild.swf 4、得到一个swf文件,打开一看是红色正方形,的确是debug版本编译 点击播放/隐藏媒体 uploads/201004/19_115454_testbuild.swf 5、然后改一下编译参数,进行release编译 mxmlc [...]
as3-rpclib
AS3来执行远程调用的开源库。
支持和即将支持的协议:
项目地址:http://code.google.com/p/as3-rpclib/
直接下载:http://as3-rpclib.googlecode.com/files/as3-rpclibv0.5.zip
flash 安全问题
js 与 swf 通讯涉及到的安全沙箱问题: js页面端 如果使用的是swfLoader,则加 flash_var.addParam(“AllowScriptAccess”,”always”); flash_var.addParam(“allowNetworking “,”all”); 例如: <script language=”JavaScript”> var flash_var = new SWFObject(“name.swf”, “flash”, 545, 633, “9″, “”); flash_var.addParam(“AllowScriptAccess”,”always”); flash_var.addParam(“allowNetworking “,”all”); flash_var.write(“flash_wrap”); </script> 如果使用的是object标签,则可以加 <object classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″ codebase=”http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0″ width=”545″ height=”633″ title=”feipan”> <param name=”movie” value=”name.swf” /> <param name=”quality” value=”high” /> <param name=”AllowScriptAccess” value=”always” /> <param name=”allowNetworking ” value=”all” /> <embed src=”name.swf” quality=”high” pluginspage=”http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash” [...]
flash 事件流 与 元件层次 的关系
as3 事件机制
以前的事件处理模型:
onClipEvent() 直接写在 MovieClip instances 上的
Callback 函数 例如XML.onload 和 Camera.onActivity
addListener()方法 简单的事件监听
The UIEventDispatcher class 实现了部分 DOM event model.
as3有什么不同:
全部废除,只有addEventListener()一种了
listener只可以是methods或function,而且自带了Delegate(好多资料里都有写,这点就不讨论了)
多了event flow概念,就是说as2中只有广播者才能addEventListener,as3中即使object不发广播,只要它在event flow中都可以 addeventlistener
event flow:
事件源如果不在displaylist中,那么跟as2一样只能 事件源.addEventListner(“xxx” xxxfunc)
否则如果事件源是可视的,那么Flashplayer会把这个event object扔到事件源所处的displaylist中去
displaylist 是一个树型结构,可以想象为下图

,然后这个eventObject会自己旅游到事件源那去,然后再回来
event flow 就是描述eventObject在这个displaylist中的旅游过程
顶端是一个特殊的display object容器—- Stage,他表现在flash.display.Stage类中,然后每一个display object都有一个属性叫stage 都引用这个应用程序的Stage
event flow 概念上被分为3部分。
第一部分叫 capture 阶段 包括从Stage到目标的parent
第2 部分叫 target 阶段 就只有目标节点
地3 部分叫 bubbling 阶段 包括从目标的parent到Stage
前边说过如果事件源不在displaylist中,那么跟as2一样只能 事件源.addEventListner(“xxx” xxxfunc) 因为它就只参加 target阶段,1,3阶段都不参与
一些特殊的事件也是这样,例如enterFrame 和 init
否则该eventObject将参与这3个阶段
但在一般情况下,默认的addEventListener只监听event flow第 2,3阶段。
看个鼠标点击的例子 (点此下载)
XMLRPC for Actionscript 3.0 – Free Library
http://danielmclaren.net/2007/08/03/xmlrpc-for-actionscript-30-free-library
Download XMLRPC for AS3
And without further ado, here are the source files:
Some notes:
- The license is LGPL
- The readme, changelog, tests, and examples are out of date.
- Here’s a link to the XML-RPC for AS2 project on SourceForge
- Gregory Goldberg also ported this project to AS3 but removed the fault handling in the process
ActionScript3 内存管理
AS3内存管理(垃圾回收 Garbage Collector) 【抄文】
