显示具有 Flash-Player 标签的文章。 显示所有文章
显示具有 Flash-Player 标签的文章。 显示所有文章

2008年8月5日 星期二

八月最后消暑日、神魂与 RiS 合办网聚啰!   [+/-]

Ticore's Blog

时间:8/24(日)下午2:00到5:00
地点:味子SAUCE - 台北市光复南路260巷28号 (国父纪念馆站2号出口,右前方直走50公尺第二条巷子旁,争鲜回转寿司、骑楼义大利面旁)
每人费用:新台币200块 (会场提供高级水果、蛋糕、饮料,并且无限供应,再加上主题新知、赠品等内容,绝对物超所值喔!)

报名网址:http://event.flash2u.com.tw/default.aspx?eventid=E2008071500001&comefrom=1
详情:http://bbs.flash2u.com.tw/dispbbs_177_86814.html

Read more...

2008年7月19日 星期六

Kaspersky Firewall Bug   [+/-]

Ticore's Blog

昨天测试 Flash AS3 Socket 联机时,意外的让 Windows VISTA 直接进入蓝画面!

后来经过反覆测试,似乎与 Windows 无关,XP、VISTA SP 几都会发生
主要问题是发生在 Kaspersky Internet Security 7.0.1.325
而 ActionScript 3.0 作的事情也很简单,每隔 10 ms 尝试 Socket 联机到 127.0.0.1:80 而已

Kaspersky Internet Security 7.0.0.325 似乎没有这个问题

使用 Flash Player 测试时,需要注意一下要在本机上跑
不然会被 Flash Player Sandbox 挡下来的
另外机器上也不要在 80 port 开 HTTP Server

ActionScript 3.0 Socket 测试程序:

package {
 import flash.display.MovieClip;
 import flash.events.IOErrorEvent;
 import flash.events.TimerEvent;
 import flash.net.Socket;
 import flash.utils.Timer;

 [SWF(width="300", height="200", backgroundColor="#FFFFFF", frameRate="30")]
 public class AS3SocketCrash extends MovieClip {
  
  protected var timer:Timer = new Timer(10);
  protected var socket:Socket = new Socket();
  
  public function AS3SocketCrash() {
   socket.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
   timer.addEventListener(TimerEvent.TIMER, onTimerHandler);
   timer.start();
  }
  
  private function onTimerHandler(evtObj:TimerEvent):void{
   socket.connect("127.0.0.1", 80);
  }
  
  private function onIOError(evtObj:IOErrorEvent):void{
   trace(evtObj);
  }
 }
}
// Ticore's Blog - http://ticore.blogspot.com/

以下则是使用 VMWare 测试得到蓝画面

Read more...

2008年7月3日 星期四

Adobe Flash Player 10 beta 2 出了   [+/-]

Ticore's Blog

Adobe Flash Player 10 beta 2 出了
其中有一个很重要的新功能 Loader.unloadAndStop(gc:Boolean = true):void
调用之后可以立即移除 SWF 内所有的音乐、Event Listeners、Timers、....

文档上的说明:

public function unloadAndStop(gc:Boolean = true):void

Attempts to unload child SWF file contents and stops the execution of commands from loaded SWF files. This method attempts to unload SWF files that were loaded using Loader.load() or Loader.loadBytes() by removing references to EventDispatcher, NetConnection, Timer, Sound, or Video objects of the child SWF file. As a result, the following occurs for the child SWF file and the child SWF file's display list:

  • Sounds are stopped.
  • Stage event listeners are removed.
  • Event listeners for enterFrame, frameConstructed, exitFrame, activate and deactivate are removed.
  • Timers are stopped.
  • Camera and Microphone instances are detached
  • Movie clips are stopped.

发现一点很奇妙的事情,beta 2 的版本号码居然比 beta 1 还少
Release Note 上写得很清楚:(我有把 Release Note 都存下来)

Updated: May 15, 2008
These release notes document known issues related to the beta versions of Adobe® Flash® Player 10, code named “Astro”. The current beta build 10.0.1.218.

Updated: July 2, 2008 These release notes document known issues related to the beta versions of Adobe® Flash® Player 10, code named "Astro". The current beta build 10.0.0.525.

难道 Flash Player 原始码也被回溯了吗? :P

Read more...

2008年5月31日 星期六

Flash 技巧 - 利用 ExternalInterface 完全暂停 Flash Movie 程序   [+/-]

Ticore's Blog

最近在 review 一年半以前发现的技巧时
『利用 window.prompt 解决 Flash 透明模式下无法输入中文的问题』
又有了新的发现

透过 ExternalInterface 调用 window.prompt 时
完全是同步的
在浏览器对话框关闭以前
Flash Movie 就像是被暂停了一样

忽然想到 Flash ActionScript 到现在没有直接提供过全面暂停的功能
(PS. Flash Player 9 debug 版可以使用 flash.system.System.pause(); 暂停)
不光是只调用 _root.stop(); 那样
要连 _root 下面所有子 MovieClip 也一并暂停啊

于是更进一步测试
发现透过 ExternalInterface 调用 JavaScript alert, prompt, confirm 时
能够将 Flash Player 几乎全面暂停

能够暂停的项目:

  1. MovieClip Timeline
  2. Video play head
  3. Timer, setInterval, setTimeout
  4. for, while 回圈
  5. 影格上的 Stream Sound

无法暂停的项目:

  1. Event Sound, 串流下载播放的 Sound
  2. Network Activity

这样一来就很方便了
除了声音对象要自行暂停以外
几乎大部分 Flash Player 内的活动都能够用 ExternalInterface 加以暂停

而且会比自行实作的更省效能
因为它连回圈, Timer 都停住了
其实已经很接近运行绪 (Threading) 的睡眠 (sleep) 功能

声音播放、网络活动等之所以无法暂停
原因可能与 Flash Player 内部运行绪配置方式有关
声音播放、网络活动都是非同步的
很可能是在主运行绪之外配置了副运行绪来处理的

未来 Flash Player 可能会支持运行绪的功能
在那之前,就先用这个小技巧
暂停 Flash Player 主运行绪吧!

ActionScript 测试程序:

import flash.external.*;

function doPause() {
 trace("Before call alert.");
 ExternalInterface.call("alert", "Flash Movie 已暂停, 按下确定继续");
 trace("After call alert.");
}

setInterval(function(){trace("onTimer: " + getTimer());}, 1000);

// Ticore's Blog - http://ticore.blogspot.com/

线上测试页面

测试程序下载

相关连结:
利用 window.prompt 解决 Flash 透明模式下无法输入中文的问题

PS. 上述功能主要是以 AS2.0 测试的
后来邦邦告知可能会引发 Script Timeout 问题
测试之后发现 AS3.0 上运行类似的动作
只要 JS Alert, Prompt 对话框超过默认 15 秒没有关闭
便会引发 Script Timeout 问题

Read more...

2008年5月28日 星期三

Flex - RemoteObject 与 ApplicationDomain 问题   [+/-]

Ticore's Blog

问题出处:SWFLoader装入问题,当要装入的swf有使用DataServices...
在 Flex App 内,以新的 ApplicationDomain 装入另一个 Flex App 之后
被读入的 Flex App 使用 RemoteObject 调用会出现问题

重新把问题程序码简化如下
因为这问题发生于 HTTP 请求之前,不必配置后端

LoadeeApp.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
 <mx:Button label="Submit" click="remoteObj.test(123);"/>
 <mx:RemoteObject id="remoteObj" destination="xxx" />
</mx:Application>
<!-- Ticore's Blog - http://ticore.blogspot.com/ -->

LoaderApp.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 <mx:SWFLoader id="swfLdr" width="100%" height="100%">
  <mx:creationComplete>
   <![CDATA[
    swfLdr.loaderContext = new LoaderContext();
    swfLdr.loaderContext.applicationDomain = new ApplicationDomain();
    swfLdr.source = "LoadeeApp.swf";
   ]]>
  </mx:creationComplete>
 </mx:SWFLoader>
</mx:Application>
<!-- Ticore's Blog - http://ticore.blogspot.com/ -->

编译之后,运行 LoaderApp,按下按钮就会得到错误消息

ArgumentError: Error #1063:
 Object/http://adobe.com/AS3/2006/builtin::hasOwnProperty()
 上的引数个数不相符。需要 0 个,当前为 2 个。
 at LoadeeApp/___LoadeeApp_Button1_click()

假如改成 remoteObj.test(); 还会得到堆栈溢位错误呢

Error: Error #1023: 发生堆栈溢位。
 at Object$/_hasOwnProperty()
 at Object/http://adobe.com/AS3/2006/builtin::hasOwnProperty()
 at Object$/_hasOwnProperty()
 at Object/http://adobe.com/AS3/2006/builtin::hasOwnProperty()
 ...

从错误消息看起来,其实与 Flex 无关
问题很可能是出在 Flash ActionScript 3.0 内建 Class 上
由于 RemoteObject 是继承 Proxy
再将问题简化,剔除 Flex 相关的因素
仅使用 Flash ActionScript 3.0 以 new ApplicationDomain(); 装入另一个 Flash App
于被装入的 Flash App 调用自订的 MyProxy 方法

LoaderFlash Class:

package {
 import flash.display.Loader;
 import flash.display.Sprite;
 import flash.net.URLRequest;
 import flash.system.ApplicationDomain;
 import flash.system.LoaderContext;

 public class LoaderFlash extends Sprite {
  
  protected var ldr:Loader;
  protected var ldrCxt:LoaderContext;
  protected var req:URLRequest;
  
  public function LoaderFlash() {
   ldr = new Loader();
   ldrCxt = new LoaderContext(false, new ApplicationDomain());
   req = new URLRequest("LoadeeFlash.swf");
   
   ldr.load(req, ldrCxt);
  }
 }
}
// Ticore's Blog - http://ticore.blogspot.com/

LoadeeFlash Class:

package {
 import flash.display.Sprite;

 public class LoadeeFlash extends Sprite {
  public function LoadeeFlash() {
   var proxy:MyProxy = new MyProxy();
   proxy.test(123);
   //proxy.prop++;
  }
 }
}
// Ticore's Blog - http://ticore.blogspot.com/

MyProxy Class:

package {
 import flash.utils.Proxy;
 import flash.utils.flash_proxy;

 public dynamic class MyProxy extends Proxy {
  public function MyProxy() {
   super();
  }
  override flash_proxy function callProperty(methodName:*, ... args):* {
   trace("callProperty :", methodName, args);
   return;
  }
  override flash_proxy function getProperty(name:*):* {
   trace("getProperty :", name);
   return;
  }
  override flash_proxy function hasProperty(name:*):Boolean{
   trace("hasProperty :", name);
   return true;
  }
 }
}
// Ticore's Blog - http://ticore.blogspot.com/

下载测试程序码

运行 LoaderFlash.swf,结果还是会得到一样的错误消息
所以 flash.utils.Proxy 无法在 new ApplicationDomain(); 方式装入的 SWF 内使用

变通方式,大概只能避免使用到 Proxy 的功能了
改以 NetConnection 等比较低阶的方式使用 Remoting 功能

以上的 Bug 至少会发生在以下版本的 Flash Player
Flash Player 9.0.115.0
Flash Player 9.0.124.0
Flash Player 10.0.0.525
Flash Player 10.0.1.218
Flash Player 10.0.12.10

Read more...

2008年5月23日 星期五

Flash Player 10 beta - 新的影格事件   [+/-]

Ticore's Blog

Flash Player 10 beta 文档出来了
要观察新的 API 更方便一些

新的 AS3 API 多了两个影格事件
分别是 Event.FRAME_CONSTRUCTED, Event.EXIT_FRAME
看起来有点像 Director 的影格事件
以往 Flash 从来没有离开影格的相关事件

Event.FRAME_CONSTRUCTED 事件按照文档上所述
是发生在影格上的 DisplayObject 创建之后
运行影格程序之前

看起来像是用来补足 Flash Player 9 影格事件的不足
之前听到不少人抱怨 AS3 作影格跳跃之后
无法直接取用该影格的时间轴预置对象 (Timeline-Placed Object)
必须要等一个影格左右的时间...
非常不方便!

不过新的 frameConstructed 事件也只是将等待一个影格的时间缩短而已
好像没有方便到哪去
至于正式版情况怎样,就拭目以待了!

以下为 Flash Player 10 beta 新影格事件测试程序:
(需要自行准备一个具有三个影格的空白 fla 文档)

package {
    import flash.display.*;
    import flash.text.*;
    import flash.events.*;

    public class Main extends MovieClip {

        public function Main() {
            this.addEventListener(Event.ENTER_FRAME, onEvent);
            this.addEventListener(Event.EXIT_FRAME, onEvent);
            this.addEventListener(Event.FRAME_CONSTRUCTED, onEvent);
            this.addFrameScript(0, onFrame, 1, onFrame, 2, onFrame);
        }

        private function onFrame():void {
            trace(currentFrame, "FrameAction");
        }

        private function onEvent(evtObj:Event):void {
            trace(currentFrame, evtObj.type);
        }

    }
}
// Ticore's Blog - http://ticore.blogspot.com/

以下是输出结果:

1 frameConstructed
1 FrameAction
1 exitFrame
2 enterFrame
2 frameConstructed
2 FrameAction
2 exitFrame
3 enterFrame
3 frameConstructed
3 FrameAction
3 exitFrame
1 enterFrame
1 frameConstructed
1 FrameAction
1 exitFrame
..
.

除了第一影格之外,大致上可以看得出来运行顺序是
enterFrame, frameConstructed, FrameAction, exitFrame

相关连结:
Flash Player 10 beta - MouseCursor 功能
Flash Player 10 beta - JPEGLoaderContext 介绍
Flash 9 AS3 时间性事件混合测试
Flash Player 8 AS2 影格程序运行顺序

Read more...

2008年5月18日 星期日

Flash Player 10 beta - MouseCursor 功能   [+/-]

Ticore's Blog

以下介绍 Flash Player 10 beta 新的 Class - MouseCursor

先利用 describeType 观察 MouseCursor 与 Mouse

import flash.ui.*;
import flash.utils.*;

trace(describeType(MouseCursor));
trace(describeType(Mouse));

可以得到以下输出结果:

<type name="flash.ui::MouseCursor" base="Class"
   isDynamic="true" isFinal="true" isStatic="true">
  <extendsClass type="Class"/>
  <extendsClass type="Object"/>
  <constant name="IBEAM" type="String"/>
  <constant name="HAND" type="String"/>
  <constant name="BUTTON" type="String"/>
  <constant name="AUTO" type="String"/>
  <constant name="ARROW" type="String"/>
  <accessor name="prototype" access="readonly" type="*" declaredBy="Class"/>
  <factory type="flash.ui::MouseCursor">
    <extendsClass type="Object"/>
  </factory>
</type>


<type name="flash.ui::Mouse" base="Class"
   isDynamic="true" isFinal="true" isStatic="true">
  <extendsClass type="Class"/>
  <extendsClass type="Object"/>
  <accessor name="cursor" access="readwrite" type="String" declaredBy="flash.ui::Mouse"/>
  <method name="hide" declaredBy="flash.ui::Mouse" returnType="void"/>
  <method name="show" declaredBy="flash.ui::Mouse" returnType="void"/>
  <accessor name="prototype" access="readonly" type="*" declaredBy="Class"/>
  <factory type="flash.ui::Mouse">
    <extendsClass type="Object"/>
  </factory>
</type>

MouseCursor 内共有五个常量 IBEAM, HAND, BUTTON, AUTO, ARROW
而刚好 Mouse 多出一个 cursor 属性
看起来就像是可以自由决定使用系统鼠标功能

实际测试之后,果然如此
可以自由设置要使用哪一个系统鼠标游标
这样就省事多了,不需要像以前那样
要先隐藏系统鼠标,还要再用一个 MovieClip 跟随鼠标~~

假如要恢复默认状态
只要重新指定为 MouseCursor.AUTO 即可

Flex MouseCursor 测试程序:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
   layout="horizontal" backgroundColor="#FFFFFF">
 <mx:Script>
  <![CDATA[
   import flash.ui.Mouse;
  ]]>
 </mx:Script>
 <mx:Button label="Auto" buttonMode="true" click="Mouse.cursor = MouseCursor.AUTO;" />
 <mx:Button label="Arrow" buttonMode="true" click="Mouse.cursor = MouseCursor.ARROW;" />
 <mx:Button label="Hand" buttonMode="true" click="Mouse.cursor = MouseCursor.HAND;" />
 <mx:Button label="Button" buttonMode="true" click="Mouse.cursor = MouseCursor.BUTTON;" />
 <mx:Button label="IBEAM" buttonMode="true" click="Mouse.cursor = MouseCursor.IBEAM;" />
</mx:Application>
<!-- Ticore's Blog - http://ticore.blogspot.com/ -->

相关连结:
Flash Player 10 beta - 新的影格事件
Flex SDK - Targeting Flash Player 10 Beta with Flex SDK 3.0.x
Flash Player 10 beta - JPEGLoaderContext 介绍

Read more...

Flash Player 10 beta - JPEGLoaderContext 介绍   [+/-]

Ticore's Blog

最近 Flash Player 10 beta 出了
各大网站、Blog 已经有太多相关文章了
在此不再赘述

除了那些官方列出来的新功能之外
还有一些是没有被发现的
像是 flash.system::JPEGLoaderContext 类别

先来利用 describeType 观察一下 JPEGLoaderContext

import flash.system.*;
import flash.utils.*;
trace(describeType(JPEGLoaderContext));

可以得到以下输出结果:

<type name="flash.system::JPEGLoaderContext"
  base="Class" isDynamic="true" isFinal="true" isStatic="true">
  <extendsClass type="Class"/>
  <extendsClass type="Object"/>
  <accessor name="prototype" access="readonly" type="*" declaredBy="Class"/>
  <factory type="flash.system::JPEGLoaderContext">
    <extendsClass type="flash.system::LoaderContext"/>
    <extendsClass type="Object"/>
    <constructor>
      <parameter index="1" type="Number" optional="true"/>
      <parameter index="2" type="Boolean" optional="true"/>
      <parameter index="3" type="flash.system::ApplicationDomain" optional="true"/>
      <parameter index="4" type="flash.system::SecurityDomain" optional="true"/>
    </constructor>
    <variable name="deblockingFilter" type="Number"/>
    <variable name="applicationDomain" type="flash.system::ApplicationDomain"/>
    <variable name="securityDomain" type="flash.system::SecurityDomain"/>
    <variable name="checkPolicyFile" type="Boolean"/>
  </factory>
</type>

从名称上看起来,用途应该是与 LoaderContext 类似的
然后是用来处理外部 JPEG 图档
只是多了一个 deblockingFilter 变量
看起来也很像是去马赛克用的

以下便是实际使用示范:(需要自行准备一个外部图档 img.jpg)

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
  initialize="init();" layout="horizontal" backgroundColor="#FFFFFF">
 <mx:Script>
  <![CDATA[
   import flash.system.*;
   import flash.utils.*;
   
   [Bindable]
   public var jpgLdrCxt1:JPEGLoaderContext = new JPEGLoaderContext(0);
   public var jpgLdrCxt2:JPEGLoaderContext = new JPEGLoaderContext(1);
   
   public function init():void{
    
    trace(describeType(JPEGLoaderContext));
    
    img1.loaderContext = jpgLdrCxt1;
    img1.source = "img.jpg";
    img2.loaderContext = jpgLdrCxt2;
    img2.source = "img.jpg";
   }
  ]]>
 </mx:Script>
 <mx:Image id="img1" scaleX="1.5" scaleY="1.5" />
 <mx:Image id="img2" scaleX="1.5" scaleY="1.5" />
</mx:Application>
<!-- Ticore's Blog - http://ticore.blogspot.com/ -->

以下是实际用 Flash Player 10.0.1.218 运行的效果

可以明显看得出来其中的差异
deblockingFilter 值大约是在 0-1 之间
超过 1 以上就没有太大的差异了
假如再加上 Bitmap.smoothing 会得到更好的效果

相关连结:
Flash Player 10 beta - 新的影格事件
Flex SDK - Targeting Flash Player 10 Beta with Flex SDK 3.0.x
Flash Player 10 beta - MouseCursor 功能

Read more...

2008年5月13日 星期二

注意你的 AIR and Flash Player version   [+/-]

Ticore's Blog

自从 Flash Player 进入到 9 版之后,功能越来越复杂
每一次的 release 都有相当程度变动
遇到版本更新有关的问题时,只知道自己装的 Flash Player 是 9 版
却不知道是哪一个 build or release
问题就很难解决了~

Adobe AIR 也是一样的
以下便是取得 AIR runtime 与 Flash Player 完整版本的方式

// AS3 Get Adobe AIR runtime version
import flash.desktop.*;
var nativeApp:NativeApplication = NativeApplication.nativeApplication;
trace(nativeApp.runtimeVersion); // 1.0
trace(nativeApp.runtimePatchLevel); // 4880

// AS3 Get Flash Player version
trace(flash.system.Capabilities.version); // WIN 9,0,115,0

// AS2 Get Flash Player version
trace(System.capabilities.version); // WIN 9,0,115,0

// AS1 Get Flash Player version
trace($version); // WIN 9,0,115,0

// AS3 Get Operating System
trace(flash.system.Capabilities.os); // Windows XP

// AS2 Get Operating System
trace(System.capabilities.os); // Windows XP

// AS3 Get Flash Player type
trace(flash.system.Capabilities.playerType); // External

// AS2 Get Flash Player type
trace(System.capabilities.playerType); // External
Read more...

2008年5月4日 星期日

一行 AS3 程序让 Flash Player 9 死机 Part 4   [+/-]

Ticore's Blog

Bug 又来了,以下任一行 AS3 程序都会造成 Flash Player Crash

Object['isPrototypeOf']();
Object['hasOwnProperty']();
Object['propertyIsEnumerable']();
Object['setPropertyIsEnumerable']();

实在是太诡异了,这么平常的 Class - Object
居然可以轻易让 Flash Player 挂掉
其实该 Bug 是在测试 Adobe AIR JavaScript 时发现的
连带的导致 AIR 也 Crash
因为 JavaScript 没有型别检查功能
不小心就会调用到不属于该对象的方法
平常 Flash 多亏了 AS3 型别检查
才会让该问题这么久没有浮上台面

正常情况下,对 Class 调用 non-static member 虽然是错误的动作
但是也不至于会造成 Flash Player Crash
只要捕捉例外就好
但是对于以上这四行 AS3 程序
try...catch 例外捕捉完全没用,Flash Player 照样 Crash

以上 Bug 至少会在以下的 Flash Player 版本发生
Flash Player 9.0.47.0
Flash Player 9.0.115.0
Flash Player 9.0.124.0

相关连结:
一行 AS3 程序让 Flash Player 9 死机 Part 3
一行 AS3 程序让 Flash Player 9 死机 Part 2
一行 AS3 程序让 Flash Player 9 死机
用 @* 指定 Attributes 造成 Flash Player 9 Crash

Read more...

2008年5月1日 星期四

AS3 - 利用 flash.sampler.getSize 观察对象大小   [+/-]

Ticore's Blog

Flash Player 9 update 3 (9.0.115.0) 添加了 flash.sampler package
里面的类别与方法主要都是与内存使用有关的
可以在 Flash Player 9 update 3 debug version 与 Adobe AIR 环境中使用
以下简单利用 flash.sampler.getSize 函式观察常用对象所占内存的大小

ActionScript 3.0 Code:

import flash.sampler.*;
import flash.display.*;

trace("new Number() : ", getSize(new Number()));
trace("new int() : ", getSize(new int()));
trace("new uint() : ", getSize(new uint()));
trace("new Boolean() : ", getSize(new Boolean()));
trace("new Object() : ", getSize(new Object()));
trace("new Array() : ", getSize(new Array()));
trace("new String() : ", getSize(new String()));
trace("new Date() : ", getSize(new Date()));
trace("new XML() : ", getSize(new XML()));
trace("new XMLList() : ", getSize(new XMLList()));
trace("new RegExp() : ", getSize(new RegExp()));
trace("new Function() : ", getSize(new Function()));
trace("new Sprite() : ", getSize(new Sprite()));
trace("new MovieClip() : ", getSize(new MovieClip()));


trace("Number : ", getSize(Number));
trace("int : ", getSize(int));
trace("uint : ", getSize(uint));
trace("Boolean : ", getSize(Boolean));
trace("Object : ", getSize(Object));
trace("Array : ", getSize(Array));
trace("String : ", getSize(String));
trace("Date : ", getSize(Date));
trace("XML : ", getSize(XML));
trace("XMLList : ", getSize(XMLList));
trace("RegExp : ", getSize(RegExp));
trace("Function : ", getSize(Function));
trace("Sprite : ", getSize(Sprite));
trace("MovieClip : ", getSize(MovieClip));


trace("[] : ", getSize([]));
trace("[0] : ", getSize([0]));
trace("[0, 1] : ", getSize([0, 1]));
trace("[null, null] : ", getSize([null, null]));
trace("new Array(0) : ", getSize(new Array(0)));
trace("new Array(1) : ", getSize(new Array(1)));


trace("{} : ", getSize({}));
trace("{a: 'a'} : ", getSize({a: 'a'}));
trace("{a: 'ab'} : ", getSize({a: 'ab'}));
trace("{a: {}} : ", getSize({a: {}}));

trace("{a: 'a', b: 1} : ", getSize({a: 'a', b: 1}));
trace("{a: null, b: null} : ", getSize({a: null, b: null}));


trace("1 : ", getSize(1));
trace("1.1 : ", getSize(1.1));

trace("'A' : ", getSize('A'));
trace("'AB' : ", getSize('AB'));
trace("'ABC' : ", getSize('ABC'));

function fun1():void{};
function fun2(arg1:*):void{var a:* = 1;};

trace("fun1 : ", getSize(fun1));
trace("fun2 : ", getSize(fun2));

输出结果:

new Number() :  4
new int() :  4
new uint() :  4
new Boolean() :  4
new Object() :  24
new Array() :  40
new String() :  28
new Date() :  32
new XML() :  16
new XMLList() :  32
new RegExp() :  48
new Function() :  588
new Sprite() :  464
new MovieClip() :  496
Number :  1133
int :  856
uint :  856
Boolean :  452
Object :  3282
Array :  4204
String :  3319
Date :  8235
XML :  4818
XMLList :  3118
RegExp :  1008
Function :  977
Sprite :  1602
MovieClip :  2182
[] :  40
[0] :  44
[0, 1] :  48
[null, null] :  48
new Array(0) :  40
new Array(1) :  40
{} :  24
{a: 'a'} :  32
{a: 'ab'} :  32
{a: {}} :  32
{a: 'a', b: 1} :  40
{a: null, b: null} :  40
1 :  4
1.1 :  8
'A' :  30
'AB' :  32
'ABC' :  34
fun1 :  32
fun2 :  32

相关连结:
ActionScript 3 Sampler 相关文档公布

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日 星期五

ActionScript 3 Sampler 相关文档公布   [+/-]

Ticore's Blog

随着 Flex 3 beta 3 释出的 Adobe® Flex™ 3 Language Reference
添加了 flash.sampler package
这里面都是一些用来观察 AVM 内存对象使用情况的公用函式与类别
不过只能用在 Flash Player debugger update 3 版本上

Package flash.sampler

Functions
clearSamples()
getGetterInvocationCount()
getInvocationCount()
getMemberNames()
getSampleCount()
getSamples()
getSetterInvocationCount()
getSize()
isGetterSetter()
pauseSampling()
startSampling()
stopSampling()
Classes
DeleteObjectSample
NewObjectSample
Sample
StackFrame

2008/05/01
正式文档位置已经改到 flash.sampler package

相关连结:
AS3 - 利用 flash.sampler.getSize 观察对象大小

Read more...

2007年12月21日 星期五

Flash Player ActiveX 9.0.115.0 Upgrade Bug   [+/-]

Ticore's Blog

又遇到 Flash Player ActiveX 与 IE 的 Bug 了
这次 Bug 与刚推出的 Flash Player ActiveX 9.0.115.0 升级有关

基本上,Flash Player 9 ActiveX 脱机安装程序有分两种版本
一种是 Flash CS3 安装目录下的 Players 资料夹
无论是 Release 或是 Debug 版本,文件大小约为 4.xx MB

另一种安装程序则是在 Flex Builder 安装目录下的 Players 资料夹
或者是到 Adobe 网站下载 Flash Player ActiveX 9
这两个来源的安装程序大概只有 RD 会用到,文件大小只有 1.xx MB

只要客户计算机从旧版的 Flash Player ActiveX 8、9 (4.xx MB)
直接安装升级到 1.59 MB 的 Flash Player ActiveX 9.0.115.0
遇到使用版本检测功能的 Flash 网站
几乎都无法正常看到 Flash 内容
像是 SWFObjectSWFFixUFO - Unobtrusive Flash Objects

OS:
Windows XP Pro SP1、SP2 CHT
Windows Vista

Flash Player ActiveX 9.0.115.0 Upgrade Bug 重现步骤:

  1. 先下载 Flash Player Uninstaller, 加上 /clean 参数运行之
    确保完整移除 Flash Player 相关程序与注册码

  2. 下载并安装 Flash Player 8 或是 Flash Player 9.0.115.0 之前任一版本 (4.xx MB)

  3. 下载并安装 Flash Player ActiveX 9.0.115.0 (1.59 MB)

  4. 创建一 HTML 网页文件,并且用 IE 运行之:
    <!-- saved from url=(0025)http://ticore.blogspot.com/ -->
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script type="text/javascript">
    try{
     var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
    } catch (e) {
     var str = "ShockwaveFlash.ShockwaveFlash.7\n" + e.name + "\n"
      + e.description + "\n" + e.number;
     alert(str);
    }
    
    try{
     var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
    } catch (e) {
     var str = "ShockwaveFlash.ShockwaveFlash.6\n" + e.name + "\n"
      + e.description + "\n" + e.number;
     alert(str);
    }
    
    try{
     var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
    } catch (e) {
     var str = "ShockwaveFlash.ShockwaveFlash\n" + e.name + "\n"
      + e.description + "\n" + e.number;
     alert(str);
    }
    
    if (axo != null) {
     alert(axo.GetVariable("$version"));
    }
    </script>
    </head>
    <body></body>
    </html>
    

    就会出现以下错误消息:

    ShockwaveFlash.ShockwaveFlash.7
    Error
    Automation 服务器程序无法生成对象
    -2146827859
    

上述错误消息意味着
在 IE 上无法利用 JavaScript 动态生成 Flash Player ActiveX 实体
很多 Flash Player 版本检测工具,包含
SWFObjectSWFFixUFO - Unobtrusive Flash Objects、Adobe AC_RunActiveContent.js (AC_RunActiveContent 内的版本检测默认没用到而已)
都是利用这方式检测 Flash Player ActiveX 版本
一旦网站使用到版本检测
碰巧浏览者又是从 Flash Player 8、9 直接升级到 9.0.115.0
就会看不到 Flash 内容了

解决方式:

  • 到 Adobe 网站重新安装一次 Flash Player 9
  • 下载 Flash Player 9 ActiveX 强迫再安装一次就会正常

不过当然最好的习惯是每次升级之前都先用
Flash Player Uninstaller 加上 /clean 参数运行
完整清除 Flash Player 与相关注册码之后再安装新版本

相关连结:
解决 IE 无法安装 Flash Player ActiveX Bug

Read more...

2007年12月11日 星期二

Linux Flash Player getTimer Bug   [+/-]

Ticore's Blog

这次又是 Linux Flash Player 的 Bug
最新版本 9.0.115.0 也会发生
在 Flash Player 运行中,更改 Linux Date 设置
假如 Date 往后更改
Flash Player getTimer() 就会得到错误的 ms 数值
假如 Date 往前更改
Flash Player 就会卡在那边,动弹不得
直到时间改回来,或是重新 refresh

Linux Flash Player getTimer Bug Demo Code:

package {
 import flash.display.*;
 import flash.text.*;
 import flash.events.*;
 import flash.utils.*;
 
 public class Main extends MovieClip {
  
  var txt:TextField = new TextField();
  var timer:Timer = new Timer(1000);
  
  public function Main ():void{
   
   txt.x = 25;
   txt.y = 25;
   txt.width = 250;
   txt.height = 150;
   txt.border = true;
   this.addChild(txt);
   
   timer.addEventListener(TimerEvent.TIMER, onTimer);
   timer.start();
  }
  
  public function onTimer (evtObj:TimerEvent):void{
   txt.appendText(getTimer() + "\n");
   txt.scrollV = txt.maxScrollV;
  }
 }
}

该 Bug 至少会在以下版本 Linux Flash Player 发生
Flash Player 9.0.31.0
Flash Player 9.0.48.0
Flash Player 9.0.115.0

Read more...

2007年12月8日 星期六

Flash Player TextField Render Bug   [+/-]

Ticore's Blog

继之前的 Flex TextField Render Bug
反覆测试与简化之后
终于厘清 Bug 发生条件,与 Flex 没有直接关系
而是 Flash Player Render TextField 的 Bug

先创建以下的 DisplayObjectContainer 结构

sprite1:DisplayObjectContainer (with Filters)
 └sprite2:DisplayObjectContainer (blendMode="layer")

此时在 sprite2 添加一个 TextField
间距至少 100 ms 之后,将 sprite1 的 filter 移除
就会造成 TextField 显示异常

AS3 TextField Render Bug Demo Code:

package {
 import flash.display.*;
 import flash.filters.*;
 import flash.text.*;
 import flash.utils.*;

 public dynamic class Main extends MovieClip {
  
  public var sp1:Sprite = new Sprite();
  public var sp2:Sprite = new Sprite();
  public var txt:TextField = new TextField();
  
  public function Main():void {
   sp1.x = 100;
   sp1.y = 80;
   
   this.addChild(sp1);
   sp1.addChild(sp2);
   sp1.filters = [new BlurFilter()];
   sp2.blendMode = BlendMode.LAYER;
   
   txt.text = "TextField";
   txt.multiline = true;
   txt.type = TextFieldType.INPUT;
   txt.border = true;
   txt.height = 22;
   
   sp2.addChild(txt);
   setTimeout(removeFilters, 600);
  }
  
  public function removeFilters():void{
   sp1.filters = [];
  }
  
 }
}

AS2 TextField Render Bug Demo Code:

import flash.filters.*;

var root:MovieClip = this;
var mc1:MovieClip = root.createEmptyMovieClip("mc1", 0);
var mc2:MovieClip = mc1.createEmptyMovieClip("mc2", 0);

mc1.filters = [new BlurFilter()];
mc2.blendMode = "layer";
var txt:TextField = mc2.createTextField("txt", 0, 100, 80, 100, 22);
txt.text = "TextField";
txt.border = true;

setTimeout(function():Void{mc1.filters = [];}, 600);

以下是几种不同的 Bug 状况

Flash Player 9.0.47.0

Flash Player 9.0.115.0

这个 Bug 会在以下版本的 Windows Flash Player 发生
Flash Player 8.0.22.0
Flash Player 8.0.33.0
Flash Player 8.0.34.0
Flash Player 8.0.35.0
Flash Player 9.0.15.0
Flash Player 9.0.16.0
Flash Player 9.0.28.0
Flash Player 9.0.45.0
Flash Player 9.0.47.0
Flash Player 9.0.64.0
Flash Player 9.0.115.0
Flash Player 9.0.124.0

只是在最新版本 9.0.115.0, 9.0.124.0 上表现比较轻微而已

相关连结:
ActionScript BitmapData.draw TextField Bug

Read more...

2007年12月7日 星期五

Flex TextField Render Bug   [+/-]

Ticore's Blog

最近开发 Flex 专案的时候,又遇到奇怪的 Bug
当 Container 指定 BlendMode 为 "layer" 模式时
调用 Modal Alert,会导致 Container 内的 TextField 显示不正常

Flex TextField Render Bug Demo Code:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal">
 <mx:Style>
  Alert {
   modalTransparencyDuration: 500;
  }
 </mx:Style>
 <mx:Script>
  <![CDATA[
   
   import flash.display.BlendMode;
   import mx.controls.Alert;
   
   public function onButtonClick(evtObj:Event):void{
    var alert:Alert = Alert.show("Alert Message", "Alert", Alert.OK);
   }
   
  ]]>
 </mx:Script>
 <mx:HBox id="box" blendMode="{BlendMode.LAYER}">
  <mx:Button id="btn" label="Alert" click="onButtonClick(event);" />
 </mx:HBox>
</mx:Application>

预期正常显示画面:

实际显示画面:

暂时性解决方式,加上 cacheAsBitmap=true 就好了

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal">
 <mx:Style>
  Alert {
   modalTransparencyDuration: 500;
  }
 </mx:Style>
 <mx:Script>
  <![CDATA[
   
   import flash.display.BlendMode;
   import mx.controls.Alert;
   
   public function onButtonClick(evtObj:Event):void{
    var alert:Alert = Alert.show("Alert Message", "Alert", Alert.OK);
   }
   
  ]]>
 </mx:Script>
 <mx:HBox id="box" cacheAsBitmap="true" blendMode="{BlendMode.LAYER}">
  <mx:Button id="btn" label="Alert" click="onButtonClick(event);" />
 </mx:HBox>
</mx:Application>

这 Bug 在 Flex 2, 3b2 都会发生,看起来很可能与 Flash Player 有关
实际测试之下,连最新版本 Flash Player 9.0.115.0 也都显示错误

相关连结:
Flex Label, TextField 半透明小技巧
Flash Player TextField Render Bug

PS. 只会发生在 Windows XP、Linux 上,在 Windows VISTA 上则是正常的

Read more...

2007年12月4日 星期二

Flash Player 9.0.115.0 出了   [+/-]

Ticore's Blog

Adobe Flash Player 9.0.115.0 终于正式 release 了
这次更新同时包含 windows, mac, linux 版本...

主要功能是加上 H.264 支持
Introducing Flash Player 9 Update 3
有兴趣的朋友可以到这里下载所有版本
Adobe Flash Player Support Center
之后有空再来慢慢测试新功能与旧 Bug...

相关连结:
Flash 9 AS3 移除 Render Event Bug
一行 AS3 程序让 Flash Player 9 死机 Part 3

Read more...