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);
      }

     }
    }

  • 相关阅读:
    metal的gpu query
    体积雾 global fog unity 及改进
    hdr rt format对颜色的影响
    unity deferred lighting
    unity linear space时 photoshop blend的正确设置
    unity linear work flow
    一些数据 bandwidth之类
    deferred rendering with msaa
    unity 显示mipmaplevel
    【转】在C#中使用SendMessage
  • 原文地址:https://www.cnblogs.com/ybgame/p/2394238.html
Copyright © 2011-2022 走看看