zoukankan      html  css  js  c++  java
  • AS3加载AS2的swf文件报错 深圳

    今天做一个demo,要用as加载一个swf,报错“如果AVM1 内容AS1 AS2已加载到 AVM2 (AS3) 内容中则不可将其移动到 displayList 的其他部分

    以下是在网上找到的解决方案

    问题描述:我们都知道flash player有两个虚拟机AVM1和AVM2。前者是flash player9以下的版本运行时所需要的,它用来解析as1和as2。后者是专门为as3开发的,用来解析as3。
    我用flash player10加载了一个player8及以下的swf(2.0的),并且把content添加到显示列表中。结果就出现这样的问题。
    ArgumentError: Error #2180: 如果 AVM1 内容(AS1 或 AS2)已加载到 AVM2 (AS3) 内容中,则不可将其移动到 displayList 的其他部分。
    at flash.display::DisplayObjectContainer/addChild()
    at flash.display::Stage/addChild()
    at _fla::MainTimeline/com()
    经测试,只有flash player10以上得版本会出这样的问题,换成9就没问题了。不知道player10是什么搞的,用的不是AVM2吗?也就是只要你用player 10加载player9以前版本发布的swf就会出错。
    问题分析:我们来看看错误描述,“如果 AVM1 内容(AS1 或 AS2)已加载到 AVM2 (AS3) 内容中,则不可将其移动到 displayList 的其他部分”。说明as1或as2已经加载进来了,只是有把它移动到其他的现实列表导致这样的问题。
    问题解决:直接把加载swf的loader加载到显示列表,这样就不会出问题。
    归根结底,ADOBE其实认为正规的做法是将loader直接作为displayObject进行addChild即可,通过建立中转的方式会导致这部分长驻内存,除非关闭FLASHPLAYER否则释放不了。

    package
    {
     import flash.display.*;
     import flash.display.Sprite;
     import flash.events.Event;
     import flash.net.URLRequest;

     public class Test extends Sprite
     {
      var pictLdr:Loader;
      var pictURL:String = "test.swf"
      var pictURLReq:URLRequest;
      
      public function Test()
      
      {
       pictLdr = new Loader();
       pictURLReq  = new URLRequest(pictURL)
       pictLdr.load(pictURLReq);
       pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);
      }
      
      function imgLoaded(event:Event):void
      {
       this.addChild(pictLdr);
      }

     }
    }

  • 相关阅读:
    线性回归模型练习
    《代码整洁之道》读书笔记五
    第八周总结
    第七周总结
    《代码整洁之道》读书笔记四
    《代码整洁之道》读书笔记三
    第六周总结
    《代码整洁之道》读书笔记二
    第五周总结
    HDFS的JavaAPI操作
  • 原文地址:https://www.cnblogs.com/ybgame/p/2394238.html
Copyright © 2011-2022 走看看