学习手艺

时间:2013-05-18 06:48:08

标签: actionscript-3 actionscript migration actionscript-2

请帮助我将此代码更新为AS3,它在AS2中。我正在学习ActionScript,所以它对我来说仍然是一个怪物...请对我很轻松。

stop();
particles_mc.duplicateMovieClip.visible = false;
trace ("undefined term")
var i:Number = 0; var
total:Number = 100;
for ( ; i < total; i++)

{

particles_mc.duplicateMovieClip.   ("particles_
mc"+i,i);
this["particles_mc"+i]._rotation = Math.floor.
(Math.random() * 360);
this["particles_mc"+i].gotoAndPlay ( Math.random
() *   particles_mc.MovieClip.totalFrames) );

}

帮助堆叠!

1 个答案:

答案 0 :(得分:1)

这看起来很不错。在AS3中有几种方法不再可用(主要是为了更好)。我会在下面解释一下。


AS3中不推荐使用

duplicateMovieClip。 AS3中没有简单的“重复”方法,但 有几种方法可以制作动画片段(mc)的多个副本。

4as,一个致力于flash编程的博客,为实现其中的几个方法提供了非常好的示例/教程,但我最喜欢的(我相信最简单的),就是创建一个自定义类,您将不止一次使用的mc(“复制”)。

首先转到库中的mc并右键单击以显示属性选项。打开符号属性窗口后,选中“导出for actionscript”框并记住“类”文本框中的文本。 * 如果您在符号属性窗口中没有看到这些选项,请确保您的高级选项可见。

现在您已经为您的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()addChildAt()方法:

//adds a movieclip to the stage
addChild(mc);
//adds a movieclip to the stage at a certain depth
addChildAt(mc,0);

AS3中不再使用

_rotation。而是使用rotation而不使用下划线。

//rotate movieclip by a certain amount
mc.rotation=180;

totalFrames实际上在技术上是AS3(AS2中的_totalFrames)。但是,您调用它的方式不正确。而不是在名为mc的动画片段内的名为MovieClip的动画片段中要求提出帧总数的mc.MovieClip.totalFrames,而只需要说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中,您可以通过用于创建它的变量来引用新创建的movieclip。在这种情况下mc。但是,如果您不相信此方法,或者稍后需要单独更改每个mc,则可以使用getChildByName()方法。

this.getChildByName("mc"+i).rotation=180;

我希望这有帮助!

编辑:

Working example

我添加了随机缩放以使其更漂亮。

尝试下载.fla以查看代码和动画片段的结构。