| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > ActionScript教程 > 文章正文 用户登录
如何加入透明Flas
为新浪博客添加fl
flashget下载联盟
265联盟:“Flash
新易网络提供100M
龙太极/100m/asp/
无限网络提供50M 
霞光科技50M/Htm/
苏能科技100M/FTP
悠博科技50M/FTP/

(AS2)Delegate 类的一个奇怪问题           

(AS2)Delegate 类的一个奇怪问题

作者:佚名 来源:不详 更新:2007-1-13 20:36:26 错误报告 我要投稿
 今天发现一个奇怪的问题,使用 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);
    }
}

文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。