Flash AS3 解决SWF加载报错问题

摘要:
----》子swf.content["影片剪辑.name"],就OK了........//------------------------------------------------------------//DoraBin12:03:56问下stage的focus出现的边框可以去掉不DoraBin12:04:47···看到了闪侠12:04:56.focusRect=null即可萧翎12:05:00我用一个swf来加载另一个swf时,为什么子swf中不能有访问stage出现啊闪侠12:05:07或者等于newSprite()闪侠12:05:46萧翎12:05:00我用一个swf来加载另一个swf时,为什么子swf中不能有访问stage出现啊子swf的stage指向父级的stage,并且此时没有加到stage上DoraBin12:05:50一位你加载进来的时候并没有把它addChild到你的容器里面萧翎12:06:03有啊DoraBin12:06:21加载的时候是没有的你是后面才加的闪侠12:06:24解决方案if(stage!
  • 一个SWF加载另一个SWF时,先看下我们用的加载代码:
  • AS3代码
  1. varloadSwf:Loader =newLoader;
  2. loadSwf.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCom)
  3. loadSwf.load(newURLRequest("demo.swf"))
  4. privatefunctionloadCom(event:Event):void{
  5. varloadInfo:LoaderInfo= event.target asLoaderInfo;
  6. vargetSwf:DisplayObject= loadInfo.content asDisplayObject;
  7. stage.addChild(getSwf);
  8. }
  • 报错情况有以下几处:
  • 1.显示对象根目录错误
  • 有 些人为图方便,直接在把Loader对象用addChild()添加到舞台上,这是错误的,因为有些子SWF的程序在文档类中,把parent看成是 stage,而直接添加Loader对象,子SWF中的parent就是Loader了,Loader相当于另一个容器,而导致子SWF执行不正常.
  • 解 决方法:看看上面的加载代码,已经是解决方法了,第六行,我们获得的getSwf其实是一个文档类的实例化,因为文档类必须继承 DisplayObject的,所以获取的类型为DisplayObject是肯定正确的.我们把文档类直接添加到stage中,这样就保证了与原SWF 的结构一致.
  • 2.加载进来提示无法访问空对象引用的属性或方法.
  • 这是因为子SWF还没有添加到舞台上就调用stage了,这时stage是null值,所以提示这个错误.
  • 解决方法:在子SWF的构造函数中,添加到舞台上再执行代码.
  • AS3代码
      1. publicfunctionMain(){//构造函数
      2. if(stage!=null){
      3. init();
      4. }else{
      5. addEventListener(Event.ADDED_TO_STAGE, init);
      6. }}
      7. privatefunctioninit(e:Event=null):void{
      8. //你的代码在这执行
      9. }
      10. 注意:在加载的时候对stage的访问要慎重,在父swf调用子swf的时候子swf的stage是不能为空的,(因为子swf会指向 loader.swf 的 stage
        ,在addChild前就调用stage是不成功的)。
      11. 在 群里闪侠给的意见是:一个简单的原则:除了keyboardEvent事件等必须在stge上侦听的事件,其他的不要在stage上侦听,否则就破坏了封 装性。还有被访问的始终只有一个stage,而且是父的stage,Stage只有一个,而且无法实例化(它是是一种很奇怪的显示对象)
      12. 还有:7行为什么是Event = null?????
        因为 :有=null的时候可以直接调用这个方法,不用带参数
        没有=null的时候,必须是促发了你的event才会去调用这个方法,是按照默认的值来传递的不赋值是eventHandler(event:Event):void{}
        那又如何取到你加载的子swf里的一个影片剪辑呢?----》子swf.content["影片剪辑.name"],就OK了........
      13. //------------------------------------------------------------//
        DoraBin(49985104)12:03:56
        问下stage的focus出现的边框可以去掉不
        DoraBin(49985104)12:04:47
        ···看到了
        闪侠(827004080)12:04:56
        .focusRect=null即可
        萧翎(469494622)12:05:00
        我用一个swf来加载另一个swf时,为什么子swf中不能有访问stage出现啊

        闪侠(827004080)12:05:07
        或者等于newSprite()
        闪侠(827004080)12:05:46
        萧翎(469494622)12:05:00
        我用一个swf来加载另一个swf时,为什么子swf中不能有访问stage出现啊

        子swf的stage指向父级的stage,并且此时没有加到stage上
        DoraBin(49985104)12:05:50
        一位你加载进来的时候并没有把它addChild到你的容器里面
        萧翎(469494622)12:06:03
        有啊
        DoraBin(49985104)12:06:21
        加载的时候是没有的你是后面才加的
        闪侠(827004080)12:06:24
        解决方案if(stage!=null)
        萧翎(469494622)12:06:28

        萧翎(469494622)12:06:41
        这样不对?
        闪侠(827004080)12:06:47
        延迟处理,直到stage不是null
        萧翎(469494622)12:07:33
        延迟处理?
        萧翎(469494622)12:07:46
        不理解,劳驾解释下
        闪侠(827004080)12:08:10
        ADDED_TO_STAGE即其一
        李玉彬(413424414)12:08:55
        这样就可以了吧
        闪侠(827004080)12:09:14
        如果无效请尝试trace(stage),仍然是null
        那么请确认编译器没有问题
        萧翎(469494622)12:09:29
        我在试试
        李玉彬(413424414)12:09:58
        Hali是文档类么?
        闪侠(827004080)12:10:59
        别说stage真的是null
        如果那样,parent、this、root可能都是null
        萧翎(469494622)12:11:04
        就是只要子swf的stge部位空就可以了吗?
        不二(474594087)12:11:17
        什么问题?刚来没有见到前面的消息
        闪侠(827004080)12:11:54
        但愿trace(stage)不是null
        不二(474594087)12:11:50
        听起来好像是多级swf加载
        闪侠(827004080)12:13:39
        感觉是,因为子swf会指向loader.swf的stage
        老镇(48036113)12:14:03
        他的问题出在addChild之前调用stage
        闪侠(827004080)12:15:56
        是的,老问题了
        不二(474594087)12:16:50
        是不是在加载子swf时候加载完了发现子swf的stage为空?
        萧翎(469494622)12:22:54
        stage不是null啊
        闪侠(827004080)12:23:15
        那就对了,应该不会有问题
        萧翎(469494622)12:23:26
        就是因为我有stage.addEventListener(Event.ENTER_FRAME,enterFrameHandler);这句,吧这句去了就OK了
        闪侠(827004080)12:23:51
        ...
        萧翎(469494622)12:24:13
        感觉好绕啊
        闪侠(827004080)12:24:38
        你这样架构会有问题了
        萧翎(469494622)12:24:48
        哪里的?
        阿蛋℡<sz1001@qq.com>12:29:30
        添加到容器stage才有引用
        萧翎(469494622)12:31:18
        只要子swf的stage不为空就可以了?我试了,成功了,呵呵,谢谢。刚才一直在迷糊,咩明白过来
        闪侠(827004080)12:34:34
        Flash AS3 解决SWF加载报错问题 - 超级大白菜 - 菜园
        闪侠(827004080)12:34:46
        这是你现在的架构
        菠菜(736036271)12:35:43
        stage.addEventListener(Event.ENTER_FRAME,enterFrameHandler)
        为什么非要侦听stage的ENTER_FRAME事件?
        �理财冰鼠☆(249383596)12:35:49
        图超了。100*100了都Flash AS3 解决SWF加载报错问题 - 超级大白菜 - 菜园
        闪侠(827004080)12:36:12
        额,再小看不清的说
        萧翎(469494622)12:37:24
        也就是说之所以出错时因为在调用时子swf文件还没有加载进来就条用了stage
        萧翎(469494622)12:37:25

        闪侠(827004080)12:37:30
        给一个简单的原则:
        除了KeyboardEvent等必须在stage上监听的事件
        其他的不要在stage上监听,单一职责
        闪侠(827004080)12:37:37
        是的
        萧翎(469494622)12:38:02
        那访问的stage是子的还是父的
        萧翎(469494622)12:38:03

        闪侠(827004080)12:38:13
        是父的
        闪侠(827004080)12:38:27
        不推荐这样做,破坏了封装性
        萧翎(469494622)12:38:36
        还是只要出现stage的话会吧是谁的stage分的很清楚的?
        闪侠(827004080)12:39:03
        Stage只有一个,而且无法实例化
        萧翎(469494622)12:39:10
        就是只要出现stage的话会把是谁的stage(子的或父的)分的很清楚
        闪侠(827004080)12:39:20
        是一种很奇怪的显示对象
        闪侠(827004080)12:39:39
        说了,Stage只会有一个
        萧翎(469494622)12:39:49
        那像ENterFrame这样的侦听在哪
        闪侠(827004080)12:39:52
        不管多少个swf

免责声明:文章转载自《Flash AS3 解决SWF加载报错问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Hadoop课程介绍C# Foreach用法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python学习之路:红绿灯例子

importtime,threading event =threading.Event() deflighter(): count =0 event.set() whileTrue: if count > 5 and count < 10:#改成红灯 event.clear()...

IE和Firefox的兼容问题

IE和Firefox的兼容问题 本文摘自:http://blog.csdn.net/powerglover/archive/2009/01/15/3789631.aspx 1、Event的问题 在ie中我们可以直接使用event变量,但是在firefox下由于event是局部变量,firefox下我们可以事件绑定到元素上 例如 <input type...

火狐和IE的window.event对象详解

FF的FIREBUG,不仅能测试JS还能检查CSS错误,是一般常用的。但它主要检查FF方面的错误,对IE就无能为力了。要测试IE,就用ieTester,它可以测试IE几乎所有版本(1.0恐怕也用不到测试了),用法也很方便。   至于JS对不同浏览器的兼容注意事项,的确很多,下面给你的也只是部分,一般建议还是采用jquery,prototype等一些已经处理...

从 sourcemap 中获取源码

使用 paazmaya/shuji: Reverse engineering JavaScript and CSS sources from sourcemaps 可以从 sourcemap 中获取源码。 一个故事: 今天同事在完全没将代码加到过 stage 的情况下按了 VSCode 的Discard All Changes,然后这个版本的所有代码都丢失...

fullcalendar日历控件知识点集合

1、基本的语法: 首先,fullcalendar和JQUERY一样,以面向对象的方式来组织代码。当然,这里的面向对象不过指能够把整个fullcalendar理解为一个类,这个类里包含有非常多的属性、方法、托付(函数回调)作为成员变量。通过为这些成员变量赋值,就可以实例化出一个符合自己需求的fullcalendar实例出来,即终于在浏览器里渲染出的日历。换...

谷歌浏览器Google Chrome和Adobe Flash Plugins插件安装问题

最近在做CSS的多浏览器支持,于是安装上了谷歌浏览器Google Chrome浏览器,结果发现谷歌浏览器Google Chrome的确构造非常简单,精干,速度非常迅猛,比臃肿的IE8快多了,于是开始使用谷歌浏览器Google Chrome,发现谷歌浏览器Google Chrome的内核构造对于CSS的支持和火狐浏览器FireFox很相似。 但是唯独有一点令...