tInspector 1.1 beta更新,附视频

附介绍视频,声音真是杯具……
[kml_flashembed publishmethod="static" fversion="9.0.0" movie="http://player.youku.com/player.php/sid/XMTg0NTc0MTc2/v.swf" width="480" height="400" targetclass="flashmovie"]
Get Adobe Flash player
[/kml_flashembed]

tInspector

tInspector 1.1 beta没有更能上的增加,仅添加了IInspector接口,方便各个功能模块化。方便开发者自己编写功能面板。

//使用tInspector只需初始化即可
Inspector.getInstance().init(this);

//开启“鼠标查看”,“设置查看类型”面板
Inspector.getInstance().turnOn(InspectorViewID.LIVE_VIEW, InspectorViewID.FILTER_VIEW);
[kml_flashembed publishmethod="static" fversion="9.0.0" movie="http://tinspector.googlecode.com/svn/trunk/demo/tInspectorDemo.swf" width="550" height="400" targetclass="flashmovie"]
Get Adobe Flash player
[/kml_flashembed]

希望tInspector对你有用:)

Flash Player 10.1修正了ByteArray的unicode编码

Flash Player 10.0.*ByteArrayUnicode编码是错误的。

按照Unicode的编码方式,一个字符应占两个字节,(像中文字符不管是Unicode或者是UTF 8还是GB2312编码,都是占用两个字节。而像英文字母或数字的编码上,UTF 8GB2312是占一个字节的)。也就是说在AS 3中如果ByteArrayUnicode写进一个字符,那么这个ByteArray.bytesAvaliable应该等于2。但是实际上在Flash Player 10.0.*上的测试结果却不是,单个拉丁字母、数字的得到的ByteArray.bytesAvaliable为1 。有图有真相,以下是对同一个字符串进行编码的二进制输出结果:

字符串在Flash Player 10.0与10.1上的编码测试

在图左侧的10.1测试结果中,单个数字字符的确是占两个字节的(用0补齐到两个字节),但右侧的10.0测试结果中,单个数字字符却只占一个字节……这!这!这!根本就不是Unicode编码嘛,倒像是UTF 8。真是对Adobe无语啊……

我们或许可以猜测在Flash Player 10.0.*ByteArrayUnicode编码根本就是UTF 8。不知道Flash Player 9.*.*上的测试结果如何。

附上用于测试的swf,文本框中输入字符,查看编码后的二进制输出结果。

[kml_flashembed publishmethod="static" fversion="9.0.0" useexpressinstall="true" movie="http://www.itamt.com/wp-content/uploads/2010/06/fp_10_unicode.swf" width="500" height="300" targetclass="flashmovie"]

Get Adobe Flash player

[/kml_flashembed]

tInspector 1.0.6.5更新

tInspector

tInspector 1.0.6.5 主要增加了InspectorFilterManager类的界面支持。现在可以方便的设定查看对象的类型。比如你可以设定鼠标在查看时只查看Sprite类型。

tInspector设置查看类型

如上图所示,就是“设置查看类型”面板。

以下面的demo为例,单击鼠标右键打开操作菜单,点击“设置查看类型”以打开查看类型的设置面板。tInspector的默认查看类型是flash.display.DisplayObject,即所有的显示对象。然后把鼠标移动到绿色的圆形上并单击,在出现的操作条上单击“设置为查看类型”,可以看到面板上也相应增加并选中了flash.display.Shape,接下来在移动鼠标时只会查看Shape类型的显示对象。

[kml_flashembed publishmethod="static" fversion="9.0.0" movie="http://tinspector.googlecode.com/svn/trunk/demo/tInspectorDemo.swf" width="550" height="400" targetclass="flashmovie"]
Get Adobe Flash player
[/kml_flashembed]
tInspector 1.0.6.5还修改了Inspector.initInspector.turnOn方法,之前的Inspector.init的参数移动到了Inspector.turnOn上。

/**
 * 开启tInspector
 * @param withMenu  在右键菜单中显示操作选项
 * @param withKeys  使用键盘快捷键
 * @param showPropPanelAtFirst  在开启时显示属性面板
 * @param showStructPanelAtFirst  在开启时显示列表结构面板
 */
public function turnOn(withMenu : Boolean = true, withKeys : Boolean = true, showPropPanelAtFirst : Boolean = false, showStructPanelAtFirst : Boolean = false, showFilterManagerAtFirst : Boolean = false) : void {
	//....
}

tInspector 1.0.6.5对整个程序的结构也进行了较大的修改,修正了之前存在的一些问题,如果你正在使用tInspector十分建议下载最新的源码包更新下。
希望tInspector对你有用:)

MouseWheelTrap

用于解决浏览其中鼠标滚动与Flash中冲突的问题,用法:

MouseWheelTrap.setup(stage);

原理上就是通过AS 3ExternalInterface调用js来禁用浏览器的鼠标滚动事件。不过使用的时候注意,作者的源代码里面是让Stage一直侦听MOUSE_MOVE事件的,这点没有必要,应该修改。

MouseWheelTrap

更新文件避免浏览器缓存的解决方案(基于svn)

问题的存在

一旦项目上线,隔不久发布更新,就会碰到一个问题:如何保证客户端(Flash)加载到的是最新的文件,而不是浏览器中的缓存?

问题的解决

最基本的,想让as3加载文件时忽略浏览器缓存可以是

  • 在URLRequestHeader中添加”no-cache”
  • 在URLRequest中附带一个参数

但显然如果文件在没有发布新版本的情况下,用不着让文件每次加载都忽略浏览器缓存,太浪费了。

那么只要有份数据,列表记录此次发布修改过的文件,让客户端(Flash)每次运行时都加载该列表。当需要加载某个文件时,可以比较这个列表,看是否需要忽略浏览器缓存加载最新文件。

这个机制挺ok的,但是如果客户端错过了一个版本,那么就可能会仍然存在没使用最新文件的问题,如图:

客户端错过了1.0.1版本的发布,没有更新“…/…/1.jpg”和“…/…/2.jpg”,当更新到1.0.3版本时,因为1.0.3版本没有记录“…/…/1.jpg”和“…/…/2.jpg”的修改,所以客户端会从浏览器缓存中加载使用这两个文件最早的版本。

可以看出,只记录更新文件(modified files)的方法不能“安全”地解决这个问题。

为安全解决这个问题,完全可以利用svn,生成一个数据文件,该数据记录每一次发布时每个文件的版本号。在客户端(Flash)运行时,因为每个文件都有个版本号,只要比较服务器与浏览器缓存中的记录文件版本号,即可决定是否忽略浏览器缓存加载最新文件。

如图,客户端(Flash)首先把浏览器缓存中的版本文件和服务器上最新的版本文件都加载进来,一旦运行时需要加载某个文件时,先比较两个版本号是否相同,如果不同则加载服务器上的文件。

动手吧

生成svn status文件

在项目新版本完成,提交到svn时,可以利用svn的命令行工具,把svn status信息输出到xml文件中,供Flash AS3读取解析。svn输出status的信息的命令是:

svn status --xml >> revisions.xml

不过svn status输出产生的xml文件非常详细,文件占得空间较大,作为每次客户端(Flash)运行都需要加载的文件,必需进行压缩。

客户端(Flash)AS3的工作

AS3方面可以编写一个类似RevisionManager的管理类,用来担起各个文件版本管理、比较的重任。

让一切自动化

最后,需要编写一个用于发布的ant脚本,这个ant应该能够:

  1. 利用svn命令行工具输出svn status信息文件
  2. 把版本信息文件进行压缩,这个可以利用JSFL来实现(Flash CS3后JSFL开始更新到E4X 2标准,支持XML)
  3. 把项目新版本提交到svn
  4. 每次发布只要运行下这个ant build.xml即可啦。

最终实现

请参考:更新文件避免浏览器缓存的解决方法(源码)