2009年3月 的存档

Adobe AIR 1.5.1新特性

电介质 发布于 2009年03月20日 星期五

AIR1.5.1已经出来有些时间了,这里有一篇新特性的介绍

关于使用InvokeEvent.reason大概意思如下:

Adobe AIR应用程序已经可以确定是如何被调用的,通过监听被NativeApplication发布的InvokeEvent 事件,InvokeEvent 事件类包含了一个新的属性reason,此属性指示:应用程序是由用户手动启动,还是在登录时自动启动。这样应用程序就可以在启动时判断是否显示界面窗口,比如在系统登录时自动启动时不打开窗口,而用户自己启动时打开窗口。

当然要使用这个新的API,需要更新应用程序的描述文件为1.5.1的命名空间。

文章分类: AIR ->发表评论 »

关于AS3中预载问题的解决方案

电介质 发布于 2009年03月01日 星期天

最近在做的一个Flash web交互应用中,所有的交互操作都是由代码控制,元件都是动态的从库中加载到场景中实现的,整个flash场景只有一帧,所有代码都在外部.as文件中,时间轴上无一句代码,虽然最后生成的文件不是很大,但swf预载还是需要实现的,查看了网上关于AS3应用开发中的预载实现,发现大多都不是很完美,有些需要在时间轴的第一帧上加入预载代码,有些用flash隐藏的功能,动态的在第一帧加入代码,而库元件的问题,有些是把在第一帧导入去掉,而在第二帧中隐藏加入所有用到的库元件在场景中…

经过分析和测试,找到一种比较完美的解决方案:

1、将场景分成两帧

2、在发布设置里的flash的脚本设置中,设置类导出在第2帧

3、在文档类的构造函数中写预载代码,类似下例:

this.stop ();//在第一帧停止

loaderInfo.addEventListener (ProgressEvent.PROGRESS, loadProgress);

loaderInfo.addEventListener (Event.COMPLETE, loadComplete);

function loadProgress (event:ProgressEvent):void{

    var percentLoaded:Number = event.bytesLoaded / event.bytesTotal;

    trace("载入"+ percentLoaded*100 + "%");//可以显示载入进度操作

}

function loadComplete (event:Event):void{

    loaderInfo.removeEventListener (ProgressEvent.PROGRESS,loadComplete);
         gotoAndStop (2);//载入完成跳到第二帧停止
         init ();//进行初始化

}

这样时间轴上不用写任何代码,包括stop()等,所有代码都在外部as文件中,而且由于库元件都在第2帧导入,所以第一帧很小。

注意事项:因为库元件都在第2帧导入,而文档类在第一帧就开始构造了,所以在预加载完成前,不要实例化库中的类,如 new 库元件类(),否则不能正确建立类实例;但可以声明库元件的类变量。

带预载入代码的完整的文档类文件结构如下:

package {

     public class 类名 extends MovieClip{

            类属性变量声明;//注意不要在这里实例化库中的类,但可以声明库类型的变量

            public function 类名(){

                stop();

                预载处理代码;

                预载完成后可以进行库类的实例化操作,或调用应用的初始化方法;

            }

            其他方法定义;

     }

}

文章分类: AS3, flash ->2 条评论 »