2013-04-01 48 views
0

我需要使用串聯接取這個函數內部的變量,下面這個例子:如何調用使用級聯功能(AS3)的可變

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); 
} 

如果我像這樣運行代碼,this [「test」+ i]返回一個類的變量。我需要局部變量,函數的變量。

+0

那麼,怎麼了? 'var obj1:Object = new Object(); var obj2:Object = new Object(); trace(obj1 == obj2); this [「obj」+ 1] = obj2; trace(obj1 == obj2);' 它可以工作(輸出中'false true') – Smolniy

+0

這一行: 這個[「plate」+ cont] = LAYER_PLATES.getChildAt(i)as Plate; 嘗試訪問一個對象,並返回一個找不到的錯誤。 – bsberti

+0

由於運氣環境,我無法測試您的代碼。跟蹤'cont',跟蹤這個[「plate」+ cont]',跟蹤'LAYER_PLATES.getChildAt(i)作爲Plate'並檢查日誌。 – Smolniy

回答

0

你沒有用[]表示法得到局部變量。你的情況有很多解決方案。您可以使用字典或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); 
}; 
1

循環訪問第一步plate0如果plate0未明確定義爲類成員變量或者類未定義爲動態,則將導致找不到錯誤。同樣的事情會在情況發生LAYER_PLATES.numChildrenplate3, plate4, plate5...超過3

編輯:

由於@Smolniy他糾正我的答案plate0從未訪問,因爲cont之前先訪問遞增。所以他提到的問題應該是plate3

+0

第一次訪問前,請先「cont ++」。他在第一個循環訪問'plate1',但在'plate3'上必須有錯誤... – Smolniy

+0

感謝您的糾正。我錯過了......:S – ggat