| Profiel van 鉴鉴赏空间Foto'sWeblogLijsten | Help |
|
11 februari 如何在duplicateMovieClip中传递变量(转载) 在论坛上看到一个HTML里的FLASH图片切换效果,JS跟FLASH通信,本来觉得没啥特别的,不过仔细看了下发现里面有行代码比较“怪异”,在使用duplicateMovieClip复制MC时,它传递了三个参数:MC新名称、深度、Object类型的一个变量。顿时奇怪了,这个Object有什么作用了?查了下帮助手册,才发现,一直以来自己居然忽视了这么好一个东东,呵呵 太惭愧了下面就来说说这个object到底能干些啥了! 这是文档里对duplicateMovieClip方法的说明: public duplicateMovieClip (name:String, depth:Number, [initObject:Object]) : MovieClip 参数 name:String - 已重制的影片剪辑的唯一标识符。 depth:Number - 一个唯一整数,指定要放置新影片剪辑的深度。使用深度 -16384 可将新影片剪辑实例放置在创作环境中创建的所有内容之下。介于 -16383 和 -1(含)之间的值是保留供创作环境使用的,不应与此方法一起使用。其余的有效深度值介于 0 和 1048575(含)之间。 initObject:Object [可选] - (Flash Player 6 和更高版本支持。)包含用于填充复制影片剪辑的属性的对象。此参数使动态创建的影片剪辑能够接收剪辑参数。如果 initObject 不是对象,则忽略它。initObject 的所有属性都已复制到新实例中。使用 initObject 指定的属性对于构造函数是可用的。 正是因为intiObject参数可选,我才忽视了这个参数的作用,我想肯定也有朋友跟我一样,这也是我写这篇文章的目的,呵呵 给某些朋友也提个醒。 从参数说明中可以看出,我们使用initObject参数可以在MC复制时初始化MC的属性,这里的属性可以理解为两方面: 第一、它是MovieClip类的属性,例如,_x _y _alpha等等我们经常使用的属性 第二、不是MC固有的属性,而是一个自定义的变量,例如自定义一个link变量。 在没有使用initObject参数前,我完成MC复制以后还需要一个with来初始化MC的属性,例如: 程序代码
for( i=0;i<5;i++){ _mc.duplicateMovieClip("_mc"+i,i); var _mc = eval("_mc"+i); with (_mc){ _x=120*i; } } 程序代码
for (i=0; i<5; i++) { _mc.duplicateMovieClip("_mc"+i, i); var _mc = eval("_mc"+i); //_mc里设置一个_txt文本,用来记录i,假设link等于i _mc._txt.text = i; _mc._x = 120*i;//为每个MC赋予按钮事件,让它能够trace出指定的link _mc.onRelease = function() { trace(i); }; } 测试我们发现,复制出来的5个MC的文本显示的确实是0到4,不过当我们点击的时候我们会发现trace出来的都是5,奇怪了,为何我们看到的link是0到4,而我们trace出来的为何是5了?如果对程序内存分配稍微有些了解的话这个就很好理解了,在FLASH里,对于5个MC,我们trace的link变量是占用同一个内存地址。那么如何解决这个问题了?我之前的做法是在复制MC时就给MC一个变量,用来记录link。 程序代码
for (i=0; i<5; i++) { _mc.duplicateMovieClip("_mc"+i, i); var _mc = eval("_mc"+i); _mc._txt.text = i; _mc._x = 120*i; _mc.link=i; _mc.onRelease = function() { trace(this.link); }; } 现在如果使用initObject参数,那么上面的问题就可以很容易解决了,同时精简了代码量。 程序代码
for (i=0; i<5; i++) { var _obj={link:i,_x:120*i,num:i}; _mc.duplicateMovieClip(”_mc”+i, i,_obj); var _mc = eval(”_mc”+i); _mc._txt.text = _mc.num; _mc.onRelease = function() { trace(this.link); }; } 再查阅一下attachMovie方法,它也有一个initObject参数,方式使用和duplicateMovieClip的一样。因此在我们动态复制MC时,如果好好利用这个参数,那么是可以让我们的复制更简洁,更方便。 (1) reactiesMeld je aan bij Windows Live ID om een reactie toe te voegen (als je Hotmail, Messenger of Xbox LIVE gebruikt, heb je al een Windows Live ID). Aanmelden Heb je geen Windows Live ID? Maak er nu een aan
Links naar je weblogDe URL voor de link naar dit weblogitem is: http://jianshang.spaces.live.com/blog/cns!1BEF7AC717DBE2C3!143.trak Weblogs die naar dit item verwijzen
|
|
|