- 一个SWF加载另一个SWF时,先看下我们用的加载代码:
- AS3代码
- var loadSwf:Loader = new Loader;
- loadSwf.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCom)
- loadSwf.load(new URLRequest("demo.swf"))
- private function loadCom(event:Event):void {
- var loadInfo:LoaderInfo = event.target as LoaderInfo;
- var getSwf:DisplayObject = loadInfo.content as DisplayObject;
- stage.addChild(getSwf);
- }
- 报错情况有以下几处:
- 1.显示对象根目录错误
- 有 些人为图方便,直接在把Loader对象用addChild()添加到舞台上,这是错误的,因为有些子SWF的程序在文档类中,把parent看成是 stage,而直接添加Loader对象,子SWF中的parent就是Loader了,Loader相当于另一个容器,而导致子SWF执行不正常.
- 解 决方法:看看上面的加载代码,已经是解决方法了,第六行,我们获得的getSwf其实是一个文档类的实例化,因为文档类必须继承 DisplayObject的,所以获取的类型为DisplayObject是肯定正确的.我们把文档类直接添加到stage中,这样就保证了与原SWF 的结构一致.
- 2.加载进来提示无法访问空对象引用的属性或方法.
- 这是因为子SWF还没有添加到舞台上就调用stage了,这时stage是null值,所以提示这个错误.
- 解决方法:在子SWF的构造函数中,添加到舞台上再执行代码.
- AS3代码
- public function Main(){//构造函数
- if (stage!=null){
- init();
- }else{
- addEventListener(Event.ADDED_TO_STAGE, init);
- }}
- private function init(e:Event = null):void {
- //你的代码在这执行
- }
- 注意:在加载的时候对stage的访问要慎重,在父swf调用子swf的时候子swf的stage是不能为空的,(因为子swf会指向 loader.swf 的 stage
,在addChild前就调用stage是不成功的)。 - 在 群里闪侠给的意见是:一个简单的原则:除了keyboardEvent事件等必须在stge上侦听的事件,其他的不要在stage上侦听,否则就破坏了封 装性。还有被访问的始终只有一个stage,而且是父的stage,Stage只有一个,而且无法实例化(它是是一种很奇怪的显示对象)
- 还有:7行为什么是Event = null?????
因为 :有=null的时候可以直接调用这个方法,不用带参数
没有=null的时候,必须是促发了你的event才会去调用这个方法,是按照默认的值来传递的不赋值是eventHandler(event:Event):void{}
那又如何取到你加载的子swf里的一个影片剪辑呢?----》子swf.content["影片剪辑.name"],就OK了........ - //------------------------------------------------------------//
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
或者等于 new Sprite()
闪侠(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
闪侠(827004080) 12:34:46
这是你现在的架构
菠菜(736036271) 12:35:43
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler)
为什么非要侦听stage的ENTER_FRAME事件?
�理财冰鼠☆(249383596) 12:35:49
图超了。100*100了都
闪侠(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