站内搜索:     
站点首页破釜学院网页制作FlashAction应用 → (AS2)Delegate 类的一个奇怪问题
正在加载相关信息.....
Web 站内搜索
(AS2)Delegate 类的一个奇怪问题
】【打印】【加入收藏】【关闭收藏到新浪ViVi】【收藏到365KEY】 浏览字号:
日期:2006-09-02 人气: 出处:闪吧 作者: fatmousescn
 今天发现一个奇怪的问题,使用 AS2 中的 Delegate 居然转两次会出现问题。目前还不是很清楚是代码上的问题还是 Flash 自身就有这个问题。先贴上来标注一下。
  首先是做一个 MC 的 Loading 类,使用 MovieClipLoader 对象。类代码如下:

import mx.utils.Delegate;
class CLoad
{
     private var my_lc:MovieClipLoader; 

     public function CLoad() {
     // 构造函数
     }
 
     public function loadMovie(path:String, mc:MovieClip):Void {
        var obj:Object = new Object();
        obj.onLoadComplete = Delegate.create(this, onLoad);

        my_lc = new MovieClipLoader();
        my_lc.addListener(obj); 
        my_lc.loadClip(path, mc);
     }
 
     public function onLoad(mc:MovieClip):Void {
        trace("yes");
     }
}

  单独测试这个类,外部使用 Delegate 重写这个 onLoad 方法,一切正常。
  接下来编写另一个类,在类中调用 CLoad 类,结果就出问题了,类代码如下:

import mx.utils.Delegate;
import CLoad;

class TestLoad
{
   private var lc:CLoad;

   public function TestLoad(path:String, mc:MovieClip) {
    lc = new CLoad();
    lc.loadMovie(path, mc);
    lc.onLoad = Delegate.create(this, onLoadC);
    trace("Start");
    }

    private function onLoadC(mc:MovieClip):Void {
       trace("load : "+mc);
    }
}

  新建一个 Flash 文件,在第一帧写上如下代码:

import TestLoad;

var mc:MovieClip = _root.createEmptyMovieClip("mmc",1);
var m_lc:TestLoad = new TestLoad("test.swf", mc);
stop();

  最初的设想是依次要输出这些内容:

Start
load : _root.mmc

  结果,却显示这样的信息:

Start
yes

  具体原因不明。先作个记号,以后解决了再贴上来!

  (8 月 10 日补充)

  经过反复测试,最后终于让我找到原因,原来是将事件定义放在了 LoadMovie 动作的后面,所以就无效了,将其反过来就 OK 了。

import mx.utils.Delegate;
import CLoad; class TestLoad
{
   private var lc:CLoad;
   public function TestLoad(path:String, mc:MovieClip)
    {
     lc = new CLoad();        
     lc.onLoad = Delegate.create(this, onLoadC);
     lc.loadMovie(path, mc);
     trace("Start");
    }
 
    private function onLoadC(mc:MovieClip):Void
    {
        trace("load : "+mc);
    }
}


>>>> 进入论坛交流 <<<<