如何在AS3中为flash连接变量

如何在AS3中为flash连接变量,flash,actionscript-3,Flash,Actionscript 3,我试着做一个函数,理想情况下,你告诉它进入下一个层次,它会为你整理所有的东西,过渡到下一个层次。现在我用它从一级到二级 level1.GoButton.addEventListener(MouseEvent.CLICK, myClick); function myClick(eventObject:MouseEvent) { if (levelText == "Password"){ //mc level transition removeChild(

我试着做一个函数,理想情况下,你告诉它进入下一个层次,它会为你整理所有的东西,过渡到下一个层次。现在我用它从一级到二级

level1.GoButton.addEventListener(MouseEvent.CLICK, myClick);

function myClick(eventObject:MouseEvent) {

    if (levelText == "Password"){
        //mc level transition
        removeChild(level1);
        var level2 = new level_2();
        addChild(level2);
        //bring effects to top
        setChildIndex(screen_FX, numChildren - 1);
        //bring border to top
        setChildIndex(Border, numChildren - 1);
        //diable layer mask mouse
        level2.masking.mouseEnabled = false;
        //play mc and transition effects
        level2.gotoAndPlay(1);

        } else {

            wrong.play(0, 1);

        }
}
我在想,如果你能以某种方式把一个可以连接变量名的变量传递到一个函数中,例如

    removeChild(level[i]);
    var level[i+1] = new level_[i+1}();
    addChild(level[i+1});

此外,我还需要使其在按下Enter键以及鼠标单击GoButton时检查levelText==whatever。

以下是一种正确的方法:

removeChild(getChildByName("level" + i.toString()));
var levelClassName:String = "level_" + (i+1).toString();
var levelClass:Class = getDefinitionByName(levelClassName);
var level:DisplayObject = new levelClass();
level.name = "level" + (i+1).toString();
addChild(level);

您不需要更改变量名,因为它是本地的,并且在下次执行
myClick

时不存在。以下是一种正确的方法:

removeChild(getChildByName("level" + i.toString()));
var levelClassName:String = "level_" + (i+1).toString();
var levelClass:Class = getDefinitionByName(levelClassName);
var level:DisplayObject = new levelClass();
level.name = "level" + (i+1).toString();
addChild(level);

您不需要更改您的变量名,因为它是本地变量,在下一次执行
myClick

时将不存在。我对您的答案Kodiak投了更高的票,因为它帮助我在数小时的寻找正确方法后解决了我的问题。非常感谢你!然而,在使用您的代码时,我遇到了一些错误(至少FlashCS5不喜欢您所做的一些事情)。所以,如果其他人碰巧遇到了这个问题,下面是我必须做的事情,以使它在Flash中工作

    removeChild(getChildByName("level" + i.toString()));
    var levelClassName:String = "level_" + (i+1).toString();
    var levelClass:Class = getDefinitionByName(levelClassName) as Class;
    var level:DisplayObject = new levelClass;
    level.name = "level" + (i+1).toString();
    addChild(level);

区别实际上只是一些语法,但它导致了错误。具体地说,getDefinitionByName不需要重新键入为字符串(也不可能是通过“:String”“maybe”“as String”或其他更好的方式,如果需要的话??)。它还提供了一个对象和类之间的不匹配错误,因此我还必须将“as class”添加到行中。另一个引起一些错误的地方是“levelClass:Class”。我发现它根本不需要类型化,但编译器不喜欢“:Class”。我相信这只适用于在'var levelClass:Class'中键入变量,否则您必须使用'levelClass as Class'或'Class(levelClass)'来键入内容。我是这里的编码高手,所以很可能我错了,但无论如何,这是我必须使用的代码。另外,不要忘记“导入flash.utils.getDefinitionByName;”放进你的包裹里

我把你的答案投给了科迪亚克,因为在我花了几个小时寻找正确的方法来做这件事之后,它帮助我解决了我的问题。非常感谢你!然而,在使用您的代码时,我遇到了一些错误(至少FlashCS5不喜欢您所做的一些事情)。所以,如果其他人碰巧遇到了这个问题,下面是我必须做的事情,以使它在Flash中工作

    removeChild(getChildByName("level" + i.toString()));
    var levelClassName:String = "level_" + (i+1).toString();
    var levelClass:Class = getDefinitionByName(levelClassName) as Class;
    var level:DisplayObject = new levelClass;
    level.name = "level" + (i+1).toString();
    addChild(level);

区别实际上只是一些语法,但它导致了错误。具体地说,getDefinitionByName不需要重新键入为字符串(也不可能是通过“:String”“maybe”“as String”或其他更好的方式,如果需要的话??)。它还提供了一个对象和类之间的不匹配错误,因此我还必须将“as class”添加到行中。另一个引起一些错误的地方是“levelClass:Class”。我发现它根本不需要类型化,但编译器不喜欢“:Class”。我相信这只适用于在'var levelClass:Class'中键入变量,否则您必须使用'levelClass as Class'或'Class(levelClass)'来键入内容。我是这里的编码高手,所以很可能我错了,但无论如何,这是我必须使用的代码。另外,不要忘记“导入flash.utils.getDefinitionByName;”放进你的包裹里

有什么你不喜欢的吗?有什么你不喜欢的吗?