找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1764|回复: 9

[AS1&2] 关于for来创建重复MC的困惑——一个小白问题

[复制链接]
发表于 2008-10-23 11:43:29 | 显示全部楼层 |阅读模式
我用for+attachMovie来创建元件总是只显示最后一个mc,
不得已只能用i++和duplicateMovieClip和interval来实现,不知道为什吗?

错误的东东
  1. //------------------------init
  2. var totalNum = 30;
  3. //------------------------run
  4. creatPic();
  5. //------------------------function
  6. function creatPic() {
  7.         for (var i = 0; i<=totalNum; i++) {
  8.                 trace("i的数值"+i)
  9.                 container.attachMovie("_mc",i+"_mc",this.getNextHighestDepth());
  10.                 container[i+"_mc"]._x = Math.random()*550;
  11.                 container[i+"_mc"]._y = Math.random()*400;
  12.                 container.onEnterFrame = alphaPic;
  13.         }
  14. }
  15. function alphaPic() {
  16.         if (this._alpha>20) {
  17.                 this._alpha -= 3;
  18.         } else {
  19.                 delete this.onEnterFrame;
  20.         }
  21. }
复制代码



非for实现的东东
  1. //------------------------init
  2. var totalNum = 30;
  3. var i = 0;
  4. var intervalID:Number;
  5. //------------------------run
  6. creatPic();
  7. intervalID = setInterval(creatPic, 10);
  8. //------------------------function
  9. function creatPic() {
  10.         i++;
  11.         trace("i的数值"+i);
  12.         //container.attachMovie("_mc",i+"_mc",this.getNextHighestDepth());
  13.         container._mc.duplicateMovieClip(i+"_mc", i);
  14.         container[i+"_mc"]._x = Math.random()*550;
  15.         container[i+"_mc"]._y = Math.random()*400;
  16.         container.onEnterFrame = alphaPic;
  17.         if (i>totalNum) {
  18.                 clearInterval(intervalID);
  19.         }
  20. }
  21. function alphaPic() {
  22.         if (this._alpha>20) {
  23.                 this._alpha -= 3;
  24.         } else {
  25.                 delete this.onEnterFrame;
  26.         }
  27. }
复制代码

重复创建.rar

9.39 KB, 下载次数: 175

发表于 2008-10-23 12:14:29 | 显示全部楼层
  1. //------------------------init
  2. var totalNum = 30;
  3. //------------------------run
  4. creatPic();
  5. //------------------------function
  6. function creatPic() {
  7.         for (var i = 0; i<=totalNum; i++) {
  8.                 trace("i的数值"+i)
  9.                 container.createEmptyMovieClip("loader"+i,i);//这里比较重要,在其内部创建一个空的加载mc
  10.                 container["loader"+i].attachMovie("_mc",i+"_mc",this.getNextHighestDepth());
  11.                 container["loader"+i]._x = Math.random()*550;
  12.                 container["loader"+i]._y = Math.random()*400;
  13.                 container.onEnterFrame = alphaPic;
  14.         }
  15. }
  16. function alphaPic() {
  17.         if (this._alpha>20) {
  18.                 this._alpha -= 3;
  19.         } else {
  20.                 delete this.onEnterFrame;
  21.         }
  22. }

  23. for(var i in container){//这个是方便查看效果的,你也可以把这个放到你那个原来的fla里查看,只输出一个影片剪辑实例,具体自己再去分析分析
  24.         trace(container[i]);
  25.         }
复制代码
回复 支持 反对

使用道具 举报

发表于 2008-10-23 12:15:30 | 显示全部楼层
container.attachMovie("_mc",i+"_mc",this.getNextHighestDepth());

这个深度不对,你用得是9我用得是8  所以我打不开  没法帮你改
回复 支持 反对

使用道具 举报

发表于 2008-10-23 14:17:56 | 显示全部楼层
注意,你用for来执行,他是一次渲染完才显示的,而你又没有一个数组来保存所有的MC,所以执行到最后就剩下最后一个mc了,要解决这个问题,可以用一个数组来记录所每次产生的mc,再对这些mc加以控制,改为:
function creatPic() {
    for (var i = 0; i<=totalNum; i++) {
        var mc=container.attachMovie("_mc",i+"_mc",this.getNextHighestDepth());
        with(mc){
       _x = Math.random()*550;
       _y = Math.random()*400;
}
       container.onEnterFrame = alphaPic;
    }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-23 14:23:55 | 显示全部楼层
啊,我是猪,深度都是同一个深度,当然只有一个了
还是斑竹的方法好,方便以后加属性

偷懒的改法
  1. container.attachMovie("_mc",i+"_mc",this.getNextHighestDepth()+i);
复制代码


程序都改过了,也变成flash8的了

[[i] 本帖最后由 sji716 于 2008-10-23 14:32 编辑 ]

重复创建.rar

15.59 KB, 下载次数: 150

回复 支持 反对

使用道具 举报

发表于 2008-10-23 14:53:29 | 显示全部楼层
斑竹是每加载一个mc就创建一个装载他的空容器,这样可以解决问题,但会导致大量无用的空mc来用于加载,加深了层级,没那个必要
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-23 15:47:10 | 显示全部楼层
我的个人理解:

如果被调用的是图片而非元件就要按斑竹的方法走,方便给那些东东加入属性(_x,_alpha……)
如果调用的是mc就可以偷懒了
回复 支持 反对

使用道具 举报

发表于 2008-10-23 16:39:24 | 显示全部楼层
with(mc){
       _x = Math.random()*550;
       _y = Math.random()*400;
       _xscale=Math.random()*100
}
同样可以
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-23 17:07:59 | 显示全部楼层
不好意思,昨天没有看见你4楼的回复,但是仿佛还是不成吧,因为还是只有一个深度,所以只能生成一个 "30_mc"

[[i] 本帖最后由 sji716 于 2008-10-24 14:47 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2008-10-24 16:29:49 | 显示全部楼层
同时创建.swf (421 Bytes, 下载次数: 175)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|Archiver|手机版|blueidea.com ( 湘ICP备12001430号 )

GMT+8, 2021-3-6 19:01 , Processed in 0.062162 second(s), 11 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表