如何使用串联调用函数的变量(AS3)

时间:2013-04-01 14:20:19

标签: actionscript-3 flash function concatenation

我需要使用连接来访问此函数中的变量,遵循以下示例:

public function movePlates():void
{
    var plate1:Plate;
    var plate2:Plate;
    var cont:uint = 0;

    for (var i:uint = 0; i < LAYER_PLATES.numChildren; i++)
    {
        var tempPlate:Plate = LAYER_PLATES.getChildAt(i) as Plate;

        if (tempPlate.selected)
        {
            cont ++;

            this["plate" + cont] = LAYER_PLATES.getChildAt(i) as Plate;
        }
    }
}

编辑:

public function testFunction():void
{
    var test1:Sprite = new Sprite();
    var test2:Sprite = new Sprite();
    var tempNumber:Number;
    this.addChild(test1);
    test1.x = 100;
    this.addChild(test2);
    test2.x = 200;

    for (var i:uint = 1; i <= 2; i++)
    {
        tempNumber += this["test" + i].x;
    }

    trace("tempNumber: " + tempNumber);
}

如果我运行这样的代码,这行[“test”+ i]返回类的变量。我需要局部变量,即函数的变量。

2 个答案:

答案 0 :(得分:1)

你的循环在第一步访问plate0这将导致未找到错误,如果plate0没有明确定义为类成员变量或者类没有被定义为动态。如果plate3, plate4, plate5...超过3,LAYER_PLATES.numChildren也会发生同样的事情。

编辑:

感谢@Smolniy,他更正了我的回答plate0永远不会被访问,因为cont在首次访问之前会增加。所以他提到问题应该在plate3

答案 1 :(得分:0)

您没有使用[]表示法获取局部变量。你的案子有很多解决方案。您可以使用dictionary或getChildAt()函数:

function testFunction():void
{
    var dict = new Dictionary(true);
    var test1:Sprite = new Sprite();
    var test2:Sprite = new Sprite();
    var tempNumber:Number = 0;

    addChild(test1);
    dict[test1] = test1.x = 100;

    addChild(test2);
    dict[test2] = test2.x = 200;

    for (var s:* in dict)
    {
        tempNumber += s.x;
        //or tempNumber += dict[s];
    }

    trace("tempNumber: " + tempNumber);
};