2014-04-02 67 views
0
 public function Main():void 
    { 

     trace(ary); 
     for (var i:int = 0; i < 150; i++) 
     { 
      ary[i] = i * 2 + 1; 
      var line:TextField = new TextField(); 
      line.text = ary[i]; 
      line.x = i * 20; 
      addChild(line); 
     } 
     var myTimer:Timer = new Timer(25,100); 
     myTimer.addEventListener(TimerEvent.TIMER, circleSpawnAndRemove); 
     myTimer.start(); 

    } 

這是我的主要功能,它包含一個數組和一個計時器。每當計時器運行時,它應該創建一個具有一定大小的圓,等待24毫秒並再次移除。嘗試刪除延遲的圓。結束了一個錯誤。 [AS3]

 public function circleSpawnAndRemove(e:TimerEvent):void 
    { 

     ball.graphics.beginFill(0xFFFFFF * Math.sin(0.1 * i), 0.5); 
     ball.graphics.drawCircle(tel, 300 , kaas); 
     ball.graphics.endFill(); 

     trace (i); 
     addChild(ball); 
     tel = 400; 
     kaas = ((125 - (Math.sin(50 * i) * 125)) + 10) 
     i++ 

     var remover:Timer = new Timer(24); 
     remover.addEventListener(TimerEvent.TIMER, ballRemover); 
     remover.start(); 

     function ballRemover(e:TimerEvent):void 
     { 
      if (i > 1) 
      { 
       removeChild(ball[i]); 
      } 

      else 
      { 
       trace("stresss") 
      } 
     } 
    } 

這是生成一個圓的代碼。當它試圖移除球時,它會顯示以下錯誤。 (翻譯)「給定的displayobject必須是調用者的孩子」

+0

ball [i]指的是數組上的一個元素,但是您沒有球數組。我不相信你需要另一個嵌套在你的初始定時器處理程序中的定時器。你能不能直接在新的球產卵之前將其移除? –

+0

作爲一個方面說明:像你的ballRemover()這樣的匿名函數在AS3中是不好的編碼習慣。把它變成一個私有函數,不要忘了在你不再需要的時候移除eventlistener。 – DodgerThud

回答

0

首先,從代碼中不清楚,「球」是如何定義的。
如果它是一個數組,然後行...

addChild(ball); 

...試圖陣列添加到階段。數組不是顯示對象,所以這是不可能的。
如果不是數組,那麼該行...

removeChild(ball[i]); 

...將拋出一個錯誤,因爲任何類型的類是的,它是不太可能使用索引符號就像一個數組。
所以,你需要弄清楚什麼是Class'ball',並堅持使用它。

我建議讓球形狀局部變量的circleSpawnAndRemove功能,並刪除了「[i]」從removeChild之行:

var ball:Shape = new Shape(); 
ball.graphics.... 

..removeChild(ball) 

有你的代碼一對夫婦的其他潛在問題;例如,'tel'和'kaas'變量在你使用它們之前不會被設置。但是讓我知道你是否需要更多的幫助。