as3 as2数据共享
有的时候,我们使用as3的swf文件加载as2的swf文件,同时还需要告诉as2的swf一些数据。蛋疼下~~ 最传统的办法就是使用localconnection了。不过很杯具的是,你得让两个swf文件约定一个连接名。好了,这样的话,你的swf如果被运行多份怎么办?那就随机一个连接名嘛——还是回到问题本身了:怎么把这个连接名在as3和as2中共享。 这里只分享下简单数据的共享,比如一个随机数字。有了这个随机数字,as2和as3就能确定一个连接名,比如_laan_123456,建立LocalConnection连接,就解决共享复杂数据的需求了。 1.最简单的方式。请使用这个类库>>,如下使用:
//在as3 swf中,将数据分享给avm1
laan.smart.as2.ShareDataToAS2.shareData(“keyName”, “value”);
//两个都是字符串类型。有了json,复杂数据类型也就不是问题了。
//在as2文件中,如下获取数据
var value:String = this["keyName"];
这种方法最简单了,而且结合json也能解决复杂数据的共享需求。不过千万要注意跨域。就是说如果as3和as2文件不在同一域下,是无法分享数据的。如果跨域了,建议你使用loader.loadBytes来加载as2文件。这样就完全没问题了。
2.使用url传递参数:
//在as2加载地址
var as2URL:String = "http://www.laaan.cn/a.swf";
//添加参数
as2URL += "?data=1234567";
loader.loader(new URLRequest(as2URL));
这种方式的缺点就是由于data的不一样,导致无法使用浏览器的缓存数据。特别是as2文件比较大时,很浪费带宽,也很考验用户耐心。当然,大量数据也是有问题的。
3.使用一些属性传递数据。因为as2加载到as3中后,就是一个AVM1Movie对象了。这样你就可以通过设置AVM1Movie的数据来传递数据了。比如opaqueBackground、alpha等等。前提是,as2和as3同一域,或者以开放域as3域了: 天地会有一个类似的帖子:http://bbs.9ria.com/viewthread.php?tid=62985&highlight=as2%2Bas3 as3代码:
//为了不影响as2的显示,alpha值保证在0.99以上。肉眼也难看出来滴~~
//0.99后面就是要携带的数据了
var lcNumber:Number = 0.99 + uint(Math.random() * 10000) / 1000000;
loader.contentLoaderInfo.alpha = lcNumber;
一定要注意Number数据类型的精度问题啊~~ 疑惑的可试试如下代码:
var n:Number = 0.991234567;
trace(n);//输出的和0.991234567可能会相差很多很多
as2代码:
var num:Number = _root._alpha;
if (num < 100) {
var as3Data:String = String(num).substr(3, 100);
_root._alpha = 100;
}
目前研究到的就这几种方案了。欢迎补充…
本文出自 传播、沟通、分享,转载时请注明出处及相应链接。
本文永久链接: https://www.nickdd.cn/?p=1410