这看起来很不错。有一些方法在 AS3 中不再可用(主要是为了更好)。我将在下面解释这些。
duplicateMovieClip
在 AS3 中已弃用。AS3 中没有简单的“复制”方法,但是有几种方法可以制作多个影片剪辑 (mc) 的副本。
4as是一个致力于闪存编程的博客,它提供了非常好的示例/教程来实现其中的几个方法,但我最喜欢的(我相信最简单的)是从你将要成为的 mc 中创建一个自定义类多次使用(“复制”)。
首先转到库中的 mc 并右键单击以显示属性选项。打开 Symbol 属性窗口后,选中“Export for actionscript”框并记住“Class”文本框中的文本。*如果您在符号属性窗口中没有看到这些选项,请确保您的高级选项可见。
现在您已经为您的 mc 创建了一个类,在您的代码中,您可以随时通过编写轻松地创建 mc 的副本:
//this creates a new movieclip called mc that is a
//duplicate of the movieclip class you created.
//replace className with the text from the "Class"
//textbox in the symbol properties window
var mc:MovieClip = new className();
为了把这个复制的 mc 放到舞台上,调用addChild()
oraddChildAt()
方法:
//adds a movieclip to the stage
addChild(mc);
//adds a movieclip to the stage at a certain depth
addChildAt(mc,0);
_rotation
在 AS3 中不再使用。而是使用rotation
不带下划线。
//rotate movieclip by a certain amount
mc.rotation=180;
totalFrames
实际上在技术上是 AS3(_totalFrames
在 AS2 中)。但是,您调用它的方式不正确。而不是说mc.MovieClip.totalFrames
哪个是在名为 mc 的影片剪辑中询问来自名为 MovieClip 的影片剪辑的总帧数,您只需说mc.totalFrames
. 这要求获得movieclip mc 内的总帧数,在这种情况下,这就是我们想要的。
这是您在 as3 中重新编写的代码,考虑到了这些更改(并对忘记的括号和奇怪的空格进行了一些更正):
//create the invisible starting mc **Not actually necessary**
/*
var start_mc:MovieClip = new part();
addChild(start_mc).visible = false;
*/
//initialize i
var i:Number = 0;
//initialize total
var total:Number = 100;
//loop i to total
for(;i<total;i++){
//Create a new mc
var mc:MovieClip = new part();
//Add that mc to the stage and name it "mc" followed by the number "i"
addChildAt(mc,i).name="mc"+i;
//rotate mc random number of degrees 0-359
mc.rotation=(Math.floor(Math.random() * 360));
//gotoAndPlay (do you really mean play?) random frame
mc.gotoAndPlay(Math.floor(Math.random()*mc.totalFrames)+1);
}
您可能会注意到,在创建影片剪辑后,我并没有使用this["mc"+i]
它来更改它。在 as3 中,您可以通过用于创建它的变量来引用新创建的影片剪辑。在这种情况下mc
。但是,如果您不信任此方法,或者以后需要单独更改每个 mc,则可以使用该getChildByName()
方法。
this.getChildByName("mc"+i).rotation=180;
我希望这有帮助!
编辑:
工作示例
我添加了随机缩放以使其更漂亮。
尝试下载 .fla 以查看代码和影片剪辑的结构。