找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3285|回复: 6

[服务器端交互] 不得不看的载入延迟问题探讨

[复制链接]
发表于 2008-6-6 04:09:16 | 显示全部楼层 |阅读模式
按赖不住要继续谈谈“载入延迟”这个严重问题。
对延迟问题,我首先得说:凡是有外部文件载入的地方,就有载入延迟问题的存在。
先卖一下这个帖子吧!!!就看你可不可以高价买进。我敢肯定有许多人吃过这方面的亏,甚至有许多人吃了亏可能还不知道是”延迟“造成的,那我就来好好提醒下,”延迟问题“不是小问题,希望以下的你能收获一点东西,写这个东西的同时我也在收获。

得感谢刚才一位经典朋友的提问,激起了我写这篇帖子的欲望,因为几乎在同一时间,我和他会到了同样的问题,也做过同样的测试。交代清楚了,开始吧。

接我原来的帖子:flash传参问题总结http://bbs.blueidea.com/thread-2859991-1-1.html
就拿我今天所有的测试实例来讲吧。



基本原理的测试:在舞台建一空白MC,取名mymc,保存在桌面,在桌面放一张图片1.jpg
1,你写下以下代码测试:
mymc.loadMovie("1.jpg")
trace(mymc._width)
输出:0
哼!内部装了那么大一张图片,居然不改变宽度?有经验的朋友都知道,如果你要做的效果要用到mymc的宽度,是无法调用的。
2,再写下以下代码测试:
var ml=new MovieClipLoader()
ml.addListener(this)
ml.loadClip("1.jpg",mymc)
trace(mymc._width)
输出:0
同样的效果
3,好,那我用下面的代码来试试:
var ml=new MovieClipLoader()
ml.addListener(this)
ml.loadClip("1.jpg",mymc)
this.onLoadComplete=function(){
trace(mymc._width)
}
输出:0
看来onLoadComplete也是不堪重任。
4,那用onLoadInit吧,”王牌“
var ml=new MovieClipLoader()
ml.addListener(this)
ml.loadClip("1.jpg",mymc)
this.onLoadInit=function(){
trace(mymc._width)
}
输出了我们要的数据,就是他了,我们要的宽度。
5,虽然达到了效果,但我们既然是在载入,就不得不考虑attachmovie把图片转成MC(一定得转为MC,直接在库中图片上设linkage是不行的),linkage设为pic
mymc.attachMovie("pic","pic1",3)
trace(mymc._width)
输出正常,这个很容易理解,他是影片内部库中的东西, 不存在延迟问题。
阐述一下我对上面总结吧:
1,2————loadmovie和直接用loadclip载入外部文件,都无法立刻取得相关信息。
3,4————MovieClipLoader是延迟的客星,但onLoadComplete不堪重任,onLoadInit才是最佳选择。
5—————attachMovie可以避免延迟,但是不推荐使用,图片一多,你有那么大库装吗?

///////////////////////////////////////////////////////////////////////////////

应用效果:
今天在研究bitmapdata类,所以就用我今天的一个例子来说吧,我贴出我原来的代码,是什么效果,我就不说了,表达不清楚,知道这个类的一看就会明白我的意图,不知道这个类的,我觉得你更要看。
舞台两个空MC,一个为mymc,一个为source
原来的代码:import flash.display.BitmapData;
var ml=new MovieClipLoader()
ml.addListener(this)
ml.loadClip("1.jpg",source)
source._width=50
source._height=50
var bm:BitmapData = new BitmapData(500,300, false,0xaa3344);
bm.draw(mymc)
mymc.attachBitmap(bm, 3, "always", true);
毫无效果。
后来改正后的代码:import flash.display.BitmapData;
var ml=new MovieClipLoader()
ml.addListener(this)
ml.loadClip("1.jpg",source)
this.onLoadInit=function(){
source._width=50
source._height=50
var bm:BitmapData = new BitmapData(500,300, false,0xaa3344);
bm.draw(mymc)
mymc.attachBitmap(bm, 3, "always", true);
}
效果正常了
桌面.rar (134.45 KB, 下载次数: 238)
1.jpg

draw.swf

88.22 KB, 下载次数: 254

 楼主| 发表于 2008-6-6 13:55:42 | 显示全部楼层
难道没人顶,自己来!
回复 支持 反对

使用道具 举报

发表于 2008-6-6 14:35:16 | 显示全部楼层
很有道理哦.
为了这MM图片.我帮你顶.
回复 支持 反对

使用道具 举报

发表于 2008-6-6 14:40:24 | 显示全部楼层
晕,这个不是我传上来的一个 用AS来加深边缘模糊效果的一个DEMO吗?
这个人是 梁静,一个影视明星.
回复 支持 反对

使用道具 举报

发表于 2008-6-6 17:10:05 | 显示全部楼层
onLoadInit和onLoadComplete别忘了加上参数.

第五条,请查阅BitmapData.loadBitmap的帮助

此外,onLoadComplete是读取完毕时执行,onLoadInit是初始化完毕并输出到场景时执行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-6 17:24:01 | 显示全部楼层
onLoadInit和onLoadComplete别忘了加上参数,因为只是为了测试,不需要任何参数输出为我所用,所以没加

对于BitmapData.loadBitmap,他是能达到我所列出的“应用效果”,但必须要导入到库,给他个linkage,才能用,而我想做的是把图片放到外部,通过加载,这样做的目的是为了随时改变图片内容,不需要在FLASH里面弄,这样做有他的优势。
回复 支持 反对

使用道具 举报

发表于 2008-9-2 19:37:07 | 显示全部楼层

这也有必要拿出来讲吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|Archiver|手机版|blueidea.com ( 湘ICP备12001430号 )

GMT+8, 2021-1-20 07:59 , Processed in 0.064324 second(s), 12 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表