flash as3 中获取当前网址

问题描述:as3中获取当前网址(swf影片所处位置的)

解决方法:用this.loaderInfo.url获取swf影片所处位置,然后用indexOf把域名后面的冗余参数给踢掉。

代码:

[code lang="as"]
Stage.prototype.myurl = this.loaderInfo.url;
var index = Stage.prototype.myurl.indexOf("/Public");
var myurl = Stage.prototype.myurl.substr(0,index);
[/code]

解释:

this.loaderInfo.url:得出当前swf所在的网址路径,如:http://www.mydomain.com/Public/xxx/erer/test.swf

indexOf:查找匹配字符位置我这里用”/Public”是因为当前地址域名后直接带这个。各位同学可以根据自己需要。不用”/”是因为和http://里匹配冲突。

substr:截取字符串

FLASH动态加载图片

今天终于把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]