显示具有 SWF 标签的文章。 显示所有文章
显示具有 SWF 标签的文章。 显示所有文章

2008年6月18日 星期三

Flex SDK 马歇尔计画   [+/-]

Ticore's Blog

Marshall Plan 原文有点长,主要只有两件事情:

  • 不同版本交互支持 (Cross-Versioning):
    不同版本 Flex 编译的 SWFs 可以被放在相同的 SecurityDomain 运行
    但是却可以有不同的 ApplicationDomain

  • 不信任的应用程序支持 (Untrusted Application):
    被装入到不同 SecurityDomain 的 SWFs 将不能访问主应用程序或是 Stage 与其它受限的资源

这个计画将可能会在 Flex 3.1 开始支持
未来不同版本的 Flex 应用程序可以做混搭了
个人猜测,这计画背后更重要的意义是 Flash 与 Flex 应用程序混搭

不过在那之前,Adobe 可能要先把 ApplicationDomain 的 Bug 处理掉吧~

Read more...

2008年2月5日 星期二

Aode AIR 与 Zinc 3.0 两则比较   [+/-]

Ticore's Blog

Adobe AIR 很早就说要跨平台支持三种 OS
可是到现在已经 Beta 3 了,Linux 版本完全没有消息
结果 Zinc 3.0 已经率先推出 Linux 版本

从资料上看,Zinc 3.0 支持功能比 AIR 多太多了
SQLite、MySQL、MSAccess、ADO 四种数据库
RealMedia、QuickTime、MediaPlayer、PDF、Browser 混搭
Dll 扩充、Process、FileSystem
其它还有一堆....

可是这么多的功能,主要都是在 Windows 上才有
换到的 Mac OS X 马上缩水一半
再换到 Linux 上就已经所剩无几了

Adobe AIR 支持的功能虽然不多
可是当前在 Windows 与 Mac OS 上来看,是非常一致的
而且这些功能与 Flash Player 集成程度很高

Flashmagazine - AIR is not a projector
Multidmedia Zinc 3.0 and Adobe AIR in review

Read more...

2007年12月28日 星期五

Flex Embed SWF 与 Embed Symbol 的差异   [+/-]

Ticore's Blog

有人提出 Flex 嵌入的 SWF 无法被 BitmapData.draw 的问题
所以来测试看看
初步测试之后发现,只要在初始化之后稍等一下
就可以正常使用了

这是很典型初始化时间差的问题
于是进一步添加编译参数 -keep-generated-actionscript=true 测试
观察 Flex 生成的中间 ActionScript 程序码

Flex Embed 示范 Main.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
 <mx:Script>
  <![CDATA[
  
   [Embed(source="../assets/assets.swf")]
   public var swf:Class;
  
   [Embed(source="../assets/assets.swf", symbol="MC")]
   public var mc:Class;
   
  ]]>
 </mx:Script>
</mx:Application>

将上述的示范添加 -keep-generated-actionscript=true 参数编译之后
可以在生成的 ActionScript 文件中查找三个与 Embed 动作相关的 AS Class
Main_mc.as、Main_swf.as、Main_swf_dataClass.as

Main_mc.as:

package {
 import mx.core.SpriteAsset;
 
 [ExcludeClass]
 [Embed(_resolvedSource="D:/Workspaces/WorkspaceFlex30/Flex3Test06/assets/assets.swf",
  _column="5", symbol="MC", source="../assets/assets.swf", _line="108", _pathsep="true",
  _file="D:/Workspaces/WorkspaceFlex30/Flex3Test06/src/generated/Main-generated.as")]

 public class Main_mc extends mx.core.SpriteAsset {
     public function Main_mc() { 
      super();
     }
 }
}

Main_swf.as:

package {
 import mx.core.MovieClipLoaderAsset;
 import flash.utils.ByteArray;
 
 public class Main_swf extends MovieClipLoaderAsset {
  public function Main_swf() {
   super();
   initialWidth=6000/20;
   initialHeight=4000/20;
  }
  private static var bytes:ByteArray = null;
 
  override public function get movieClipData():ByteArray {
   if (bytes == null) {
    bytes = ByteArray( new dataClass() );
   }
   return bytes;
  }
  [Embed(_resolvedSource='D:/Workspaces/WorkspaceFlex30/Flex3Test06/assets/assets.swf',
   mimeType='application/octet-stream')]
  public var dataClass:Class;
 }
}

Main_swf_dataClass.as:

package {
 import mx.core.ByteArrayAsset;
 
 [ExcludeClass]
 [Embed(_resolvedSource="D:/Workspaces/WorkspaceFlex30/Flex3Test06/assets/assets.swf",
  _column="3", exportSymbol="Main_swf_dataClass", _line="25", _file="Main_swf.as",
  mimeType="application/octet-stream")]
 
 public class Main_swf_dataClass extends mx.core.ByteArrayAsset {
     public function Main_swf_dataClass() { 
      super(); 
     }
 }
}

由生成的程序码来看,直接 Embed Symbol 并无特别之处
可是 Embed SWF 文件,就不太一样了
Flex 编译器会自动将整个 SWF 文件以 Binary 方式嵌入
运行期使用的时候,最终也是透过 Loader.loadBytes 方式还原
这样的话,一定会有时间差
无法在刚 new 完之后立刻取用

除了上述的问题以外
透过 Loader.loadBytes 生成的实体
还有一些安全性的限制

此外,嵌入整个 SWF 也会增加无谓的文件容量
所以最好还是不要将整个 SWF 嵌入比较好

最后补充一点,嵌入整个 SWF 会保留 ActionScript
而嵌入 Symbol 的 ActionScript 不会保留

Read more...

2007年7月30日 星期一

Flash Player HTTP 资料请求行为   [+/-]

Ticore's Blog

以往 ActionScript 1.0、2.0 使用 LoadVars、loadVariables 甚至是 Flash Remoting
发出的 HTTP Request 都无法用程序加以终止或是缩短 Timeout 时间
遇到连续发出的请求,甚至还会造成客户端浏览器当掉

ActionScript 3.0 已经对此作了一些改善
以下则是一些 AS HTTP Request 行为整理:

  • AS3 - flash.net.URLRequst
    1. URLLoader 连续发出 Request 时,前面的 Request 均会被终止,
      只有最后一个可以继续运行
    2. URLLoader 发出 Request 后,可以用 URLLoader.close 终止下载动作

  • AS3 - flash.net.NetConnection (Remoting)
    1. 连续发出 Request 时,前面的 Request 均会继续运行
    2. 即使调用 NetConnection.close,删除 NetConnection 实体,
      也无法终止一连串下载动作

  • AS2 - LoadVars, loadVariables, loadVariablesNum, NetConnection (Remoting)
    1. 连续发出 Request 时,前面的 Request 均会继续运行
    2. 即使 unloadMovie, loadMovieNum(0) 也无法终止一连串下载动作

  • AS2 - loadMovie, loadMovieNum
    1. 使用 loadMovie 连续发出 Request 时,前面的 Request 均会被终止,
      只有最后一个可以继续运行
    2. 使用 loadMovie 读取资料时,可以用 unloadMovie 终止下载动作

这样看来,假如想要在 ActionScript 2.0 使用较佳 HTTP Request 控制
有必要采用 SWF 作为资料交换的格式
需要动态生成 SWF 的功能
这个 OpenSource 可以省去不少功夫 SWX: SWF Data Exchange Format

Read more...

2007年7月27日 星期五

Flash SWF 9 文件规格已经公布了   [+/-]

Ticore's Blog

有兴趣可以到以下网址申请

Flash Player Developer SDKs Read more...

2007年6月5日 星期二

SWF9 传递参数给 SWF8 的方式   [+/-]

Ticore's Blog

一般嵌入网页中的 SWF 可以利用 FlashVars 或是 URL GET 传递参数
(URL GET 方式会造成浏览器快取失效,不建议使用)

而 SWF Load SWF 时剩下 URL GET 方式以及 MovieClipLoader or Loader 相关事件处理机制可用
若是 SWF9 Load SWF8 则是连事件处理都难以使用
(SWF9 与 SWF8 之间的沟通方式)

此时改用 URL 后面附加 # 参数似乎不错
可以避免掉 URL GET 造成快取失效的问题

ActionScript 2.0 Parse Anchor Parameter
var paramStr:String = _url.split("#")[1];
paramStr = paramStr == null ? "" : paramStr;
var paramObj:LoadVars = new LoadVars();
paramObj.decode(paramStr);
for (var i in paramObj) {
 txt.text += i + " : " + paramObj[i] + "\n";
}

 

ActionScript 3.0 Pass Parameter by Anchor
package {
 import flash.display.*;
 import flash.net.*;
 public class main extends MovieClip {
  
  private var loader1:Loader;
  private var loader2:Loader;
  
  public function main() {
   stage.scaleMode = StageScaleMode.NO_SCALE;
   init();
  }
  public function init():void {
   loader1 = new Loader();
   loader2 = new Loader();
   loader2.y = 100;
   loader1.load(new URLRequest("swf8.swf#var1=11&var2=22"));
   loader2.load(new URLRequest("swf8.swf#var1=22&var2=11"));
   this.addChild(loader1);
   this.addChild(loader2);
  }
 }
}

实际放到 HTTP Server 上进行测试
可以发现利用锚点传递参数不会造成 SWF 文件快取失效

Read more...

2005年12月31日 星期六

不同swf文件之SharedObject资料一致性   [+/-]

Ticore's Blog

SharedObject 从 Flash 6 开始支持到现在已经有好几年的时间了
使用上虽然相当容易
但是很多特性仍然是不清楚
尤其是文档上都没有写
以下为个人对于「不同 swf 使用单一 SO 对象时的一致性」的一些心得:
  • 要保持不同 swf 文件之间 so 对象的一致性
    一定要将旧的 SharedObject Ref. 删除
    重新调用 SharedObject.getLocal(),以更新 so 对象

  • 直接重新指定参考so = SharedObject.getLocal() 是没有用的
    因为旧的 so 对象不会被回收

  • 丢弃 so 对象可以用 delete 或是指定为 null

  • 单一 swf 内,重复使用 SharedObject.getLocal() 取得相同名称的so 对象
    假如未将之前取得的 so 对象丢弃
    后续用 SharedObject.getLocal() 取得的so永远是同一个so对象参考
    (ref. equal) Singleton?

  • 多个 swf 陆续调用 SharedObject.getLocal() 取得相同 so 对象之后
    假如都没有释放取得的 so 对象,进行指定资料的动作
    在没有调用 flush() 情况下,so 对象并不会立即写入资料
    而是在 so 释放时,才将资料写入
    只有最后一个取得 so 对象的 swf 具有真正写入 *.sol file 的权力

  • 不违反上一个条件的情况下
    上述情况可以用 SharedObject.flush() 让资料立即写入
Read more...