找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3700|回复: 24

[AS3] 有关loading的疑问

[复制链接]
发表于 2010-2-16 23:48:23 | 显示全部楼层 |阅读模式
上次在版主的指导下,我完成了一个模仿他人的载入自身动画的loading,代码如下
  1. stop();
  2. preloader.width = stage.stageWidth;
  3. preloader.x = 0;
  4. preloader.y = (stage.stageHeight - preloader.height) * 0.5;
  5. preloader.bar.scaleX = 0;
  6. addEventListener(Event.ENTER_FRAME,kaishi);
  7. function kaishi(e:Event):void {
  8.         var n:Number = (loaderInfo.bytesLoaded/loaderInfo.bytesTotal) * 0.5;
  9.         if (n<0.5) {
  10.                 preloader.bar.scaleX = n;
  11.         }
  12.         if (n==0.5 && preloader.bar.scaleX<1) {
  13.                 preloader.bar.scaleX +=0.1;
  14.         }
  15.         if (preloader.bar.scaleX >=1) {
  16.                 preloader.bar.visible = false;
  17.                 gotoAndStop(2);
  18.                 removeEventListener(Event.ENTER_FRAME,kaishi);
  19.         }
  20. }
复制代码

在测试以及模拟下载时都能完美的实现我所要求的效果。但是,我做这个loading的初衷,是希望在别的flash里载入这个swf时,能够有一个缓冲。现在的问题是,缓冲是有了,但是效果有点偏差:
我在设计loading时,是从左到右的闪过,但是载入时,是从中间向两边的延伸,我在想,可能是因为我在主flash里设置了载入的swf位置的绝对居中
  1. loader.x = (stage.stageWidth - loader.width) * 0.5;
  2.                 loader.y = (stage.stageHeight - loader.height) * 0.5 ;
复制代码
,那么我该如何才能达到我的要求呢?请版主及各位达人不吝赐教
发表于 2010-2-17 09:44:44 | 显示全部楼层
把preloader.bar 中的图形拖一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-17 14:18:29 | 显示全部楼层
请问版主的意思是不是说把那个图形给对齐到舞台左边?还是说把变换基点调到左边?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-17 16:40:32 | 显示全部楼层
经过测试,把图形对齐以及调整变换基点都无效,请版主再帮忙看看,谢谢

selina.rar

198.51 KB, 下载次数: 316

回复 支持 反对

使用道具 举报

发表于 2010-2-18 12:53:28 | 显示全部楼层
 调整坐标一次就行了,不需要放到enterFrame中
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-18 13:01:03 | 显示全部楼层
谢谢斑竹,我改一下看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-18 13:06:00 | 显示全部楼层
报告斑竹,我把enterframe删掉后,变成都不居中了。。。。
回复 支持 反对

使用道具 举报

发表于 2010-2-18 14:51:25 | 显示全部楼层
如果在持续事件中居中,眼睛就会觉得它是在向两边伸长,而不是单纯的向右
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-18 15:12:37 | 显示全部楼层
但是如果不持续的居中,仅仅是在载入完成后设定坐标居中,则完全没有居中的效果,我不知道原因,斑竹指教,谢谢
回复 支持 反对

使用道具 举报

发表于 2010-2-18 15:29:39 | 显示全部楼层
通常居中效果是在resize事件中设置的,不推荐使用enterFrame
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-18 17:57:43 | 显示全部楼层
在论坛上搜索resize,貌似出来的都是as2.0的做法?
请问版主,在as3里应该怎么做呢?
回复 支持 反对

使用道具 举报

发表于 2010-2-18 18:00:08 | 显示全部楼层
 F1 都有
  AS3的在论坛里也讨论过多次
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-18 18:57:54 | 显示全部楼层
回版主,搜索到你之前的帖子,我把代码改成
  1. function aboutclick(e:MouseEvent):void {
  2.         var main:URLRequest = new URLRequest("about.swf");
  3.         loader.load(main);
  4.         loader.contentLoaderInfo.addEventListener(Event.COMPLETE,kk);
  5.         function kk(e:Event):void {
  6.                 stage.addEventListener(Event.RESIZE,onResize)
  7.         }
  8.         function onResize(e:Event):void {
  9.                 loader.x = (stage.stageWidth - loader.width) * 0.5;
  10.                 loader.y = (stage.stageHeight - loader.height) * 0.5 ;
  11.                 loader.scaleX = loader.scaleY = 0.8;
  12.                 stage.removeEventListener(Event.RESIZE,onResize);
  13.                 addChild(loader);
  14.         }
  15. }
复制代码


但是依然报错,提示
  1. TypeError: Error #1009: 无法访问空对象引用的属性或方法。
  2.         at about_fla::MainTimeline/about_fla::frame1()
复制代码

请版主指点,谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-18 19:10:22 | 显示全部楼层
更正,CTRL+ENTER时会提示出错,但是我按了一下右上的放大按钮,测试又可以了。。。。求解。。。
二次更正,按了放大按钮后,loading可以了,但是载入的swf一样是没居中~-~

[[i] 本帖最后由 tenzn 于 2010-2-18 19:16 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2010-2-18 19:53:15 | 显示全部楼层
理解了,自然就实现了,加油
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-18 20:02:46 | 显示全部楼层
版主让我用的resize的意思应该是窗口发生改变
所以我按了之后才会开始addChild,后来我把addChild拿到resize外面了
但是问题又来了,现在的情况是,假设窗口不发生改变,loading的效果很完美,但是载入的swf不居中,我把居中的代码复制一份到Event.COMPLETE之后依然无效,悲剧
回复 支持 反对

使用道具 举报

发表于 2010-2-18 20:04:48 | 显示全部楼层


其实从头到尾,我没明白楼主究竟要实现的是什么.楼主的源文件我下载过,但不全,而且代码也显得很繁琐. 单独去做例子,又因为懒觉得没必要
所以
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-18 20:09:50 | 显示全部楼层
好吧- -我其实是想自己做一个FLASH站,包括之前的产品展示一大堆的效果
这次的工作是增加在主页面点击项目按钮载入对应SWF前的一个loading效果
最初是loading效果的出错,我本来是要从左到右闪过的横线变成了从中间到两边的延伸
现在根据版主的提示,修改了一下,可以实现横线从左到右了,但是原本设置好的SWF居中效果又出错了- -
应版主要求,我重新做一个示例文件,一会请版主指教,谢谢
回复 支持 反对

使用道具 举报

发表于 2010-2-18 20:21:56 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-18 20:47:36 | 显示全部楼层
应版主要求,做了个测试文件- -请版主帮忙看下,多谢

顺便说下,1和2两个swf只有2帧,第一帧是那个loading,代码如下
  1. stop();
  2. preloader.width = stage.stageWidth;
  3. preloader.x = 0;
  4. preloader.y = (stage.stageHeight - preloader.height) * 0.5;
  5. preloader.bar.scaleX = 0;
  6. addEventListener(Event.ENTER_FRAME,kaishi);
  7. function kaishi(e:Event):void {
  8.         var n:Number = (loaderInfo.bytesLoaded/loaderInfo.bytesTotal) * 0.5;
  9.         if (n<0.5) {
  10.                 preloader.bar.scaleX = n;
  11.         }
  12.         if (n==0.5 && preloader.bar.scaleX<1) {
  13.                 preloader.bar.scaleX +=0.1;
  14.         }
  15.         if (preloader.bar.scaleX >=1) {
  16.                 preloader.bar.visible = false;
  17.                 gotoAndStop(2);
  18.                 removeEventListener(Event.ENTER_FRAME,kaishi);
  19.         }
  20. }
复制代码

第二帧就是一张图片了

[[i] 本帖最后由 tenzn 于 2010-2-18 20:49 编辑 ]

test.rar

208.94 KB, 下载次数: 329

回复 支持 反对

使用道具 举报

发表于 2010-2-18 20:57:25 | 显示全部楼层
loader.x = (stage.stageWidth - loader.width) * 0.5;
                loader.y = (stage.stageHeight - loader.height) * 0.5;
用这种思路调整坐标,让被加载对象居中,要求被加载文件第一帧上的尺寸要严格等于舞台尺寸(这个问题解释过无数次了,想了解更多,请搜索老贴无数)

推荐从文件头中读取舞台尺寸或者用变量保存在加载完成时读取(这也说过很多次了)





另外楼主的被加载文件中还有典型的stage访问的问题 ,按F1 查看 Event.ADDED_TO_STAGE  可以得到解决,搜索 Event.ADDED_TO_STAGE  也是一堆老帖

[[i] 本帖最后由 flash023 于 2010-2-18 20:58 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-18 21:45:09 | 显示全部楼层
回版主,有关Event.ADDED_TO_STAGE,我已经搜索到了,并且解决了,貌似之前版主也有给我说过了,只是我这段时间做的几个SWF都没出问题,让我忽略了

另外,有关“用这种思路调整坐标,让被加载对象居中,要求被加载文件第一帧上的尺寸要严格等于舞台尺寸(这个问题解释过无数次了,想了解更多,请搜索老贴无数)”这个我还没搜索到有用的帖子,听版主的口气是不太建议这种办法,所以我选择放弃搜索

有关“推荐从文件头中读取舞台尺寸或者用变量保存在加载完成时读取(这也说过很多次了)”我也没找到相关的内容,请版主指条明路,多谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-18 21:48:34 | 显示全部楼层
在论坛搜索,找到如下代码
  1. loader.x = (stage.stageWidth - loader.contentLoaderInfo.width) * 0.5;
  2.                 loader.y = (stage.stageHeight - loader.contentLoaderInfo.height) * 0.5;
复制代码

貌似我的效果完成了,多谢版主的耐心指导,另外我对版主所说的推荐方法很有兴趣,请版主不吝赐教
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-18 22:07:08 | 显示全部楼层
修改过后的文件,已经很好的实现了我要的效果,但是那个loading为什么是在底部而不是居中呢?请版主帮忙看下,谢谢
另外,我把原来的文件按照示例文件这么修改,依旧不能很好的居中,继续保留疑问。。。

test.rar

209.25 KB, 下载次数: 283

回复 支持 反对

使用道具 举报

发表于 2010-2-19 09:11:22 | 显示全部楼层
搜索关键字 棉花糖Swfinfo

这类问题除了  从文件头中读取舞台尺寸或者用变量保存在加载完成时读取  没有完美的解决办法

多搜索多动手,重复太多的次的问题,没耐心一次又一次的啰嗦
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2021-1-22 21:09 , Processed in 0.112912 second(s), 10 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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