Actionscript 3 AS3从mc更新根目录中的变量

Actionscript 3 AS3从mc更新根目录中的变量,actionscript-3,flash,Actionscript 3,Flash,这应该很简单。 我想在舞台上播放一段电影剪辑3次,然后在flash中进入我的结尾 我在第1帧的主时间线上实例化了一个变量 var i:int = 0; 在电影剪辑的最后一帧,我想迭代我的变量 this.i += 1; trace(this.i); 但我的跟踪返回未分配等。 我似乎用错了运算符,但我试过的都不管用。。提前感谢。您的解决方案 您可以在主时间线上书写: var i:int = 1; var i:int = 0; addEventListener(Event.ENTER_FRA

这应该很简单。 我想在舞台上播放一段电影剪辑3次,然后在flash中进入我的结尾

我在第1帧的主时间线上实例化了一个变量

var i:int = 0; 
在电影剪辑的最后一帧,我想迭代我的变量

this.i += 1;
trace(this.i);
但我的跟踪返回未分配等。
我似乎用错了运算符,但我试过的都不管用。。提前感谢。

您的解决方案

您可以在主时间线上书写:

var i:int = 1;
var i:int = 0;

addEventListener(Event.ENTER_FRAME, timesIPlayed);

function timesIPlayed(e:Event):void {
    if (myMovieClip.currentFrame == myMovieClip.totalFrames) i++;
    if (i == 3) {
        myMovieClip.stop();
        removeEventListener(Event.ENTER_FRAME, timesIPlayed);
    }
}
在你的电影唇的最后一帧:

if (MovieClip(parent).i++ == 3) stop();
另一种解决方案

您还可以使用MovieClip的属性和属性计算MovieClip被播放的次数。只需在主时间线上写下:

var i:int = 1;
var i:int = 0;

addEventListener(Event.ENTER_FRAME, timesIPlayed);

function timesIPlayed(e:Event):void {
    if (myMovieClip.currentFrame == myMovieClip.totalFrames) i++;
    if (i == 3) {
        myMovieClip.stop();
        removeEventListener(Event.ENTER_FRAME, timesIPlayed);
    }
}

这是关注点分离的一个例子,比如代码解耦——然而,撇开它不谈,一些前AS2开发人员在AS3中使用的替换全局变量的技巧是将变量附加到根

例如-在主时间轴操作上,声明变量已附加到根:

主时间线

MovieClip(root).myVar = 1;
MovieClip(root).myVar += 1;
trace(MovieClip(root).myVar);
现在,您可以从任何位置(如符号)访问同一对象:

MovieClip时间线

MovieClip(root).myVar = 1;
MovieClip(root).myVar += 1;
trace(MovieClip(root).myVar);
作为替代方法,更好的设计模式是定义主文档类并使用静态变量:

public class Main {
    public static var myVar:uint = 1;
}
然后,您可以在任何地方访问此静态变量:

Main.myVar += 1;
trace(Main.myVar);

您的代码:
MovieClip(root).myVar=1被我的Flash编译器视为一个错误。1180:调用一个可能未定义的方法MovieClip。@helloflash编译时使用的是什么?你自己试一试吧——看我的。如果
MovieClip
未定义,则导入它:
import flash.display.MovieClip