今天终于把flash动态加载图片的效果弄好了。还算顺利。哈利路亚,荣誉归主。
这里总结回顾一下:
关键字:导入图片“平滑”属性,全局变量,安全沙箱。
要求很简单,就是要背景可以放大,渐变。原来计划是用js脚本实现的。后来发现效果比较差(耗CPU,而且放大的时候还比较卡)。然后决定用flash做。
用flash实现的话,一路遇到几个问题:
1.图片动态加载,这样flash的swf文件会很小,加载速度快,网站显示用户体验好,同时可以等待图片下载好了再播放渐变。
2.加载图片是又遇到些问题,图片放大时很很卡,像马赛克般。后来我们的美工发现导入图片时要勾选“平滑”这个属性。所以加载图片不成。只能曲线救国,用加载包含图片的子swf影片。而swf影片里导入图片时用“平滑”的属性。
3.大体ok了,但是不知道怎么的循环头尾时总出现跳白。猜想大概是第一帧的时候重复又加载了一次。想了个办法。用个全局的变量控制,如果已加载过,就不要加载了,直接播放。否则加载。顺便说下全局变量。在as3中,已经不用_golbal这个关键字了。网上找了下资料,发现又一个曲线救国的方法:用了stage这个舞台对象做全局变量(舞台总是存在的嘛)。
4.还有需要注意的,因为flash的安全沙箱机制。加载的swf影片和主影片必须在同一个域名下。
5.我这里用了比较简单的方式,就是重复加载N个子影片,然后用常规的方式在动画轴中加效果。如果用AS3来实现全部的效果,也许更干净,感兴趣的童鞋自己试。
以下是AS3源代码,可以根据添加N个子影片,然后做相关的效果。
[sourcecode language="ActionScript3"]
import flash.display.*;
import flash.net.URLRequest;
if (Stage.prototype.flag) {
bg1.addChild(pictLdr.content);
play();
} else {
stop();
var pictLdr = new Loader();
pictLdr.load(new URLRequest("http://zunguiyou.guilincits.com/Public/forflash/bg1.swf"));
pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);
function imgLoaded(event:Event):void {
bg1.addChild(pictLdr.content);
Stage.prototype.flag=1;
play();
}
}
[/sourcecode]