2010-03-22 134 views
0

我想從擴展動畫片段的類訪問主時間線的舞臺。基本上,我在主時間軸上有一個按鈕,使HUD顯現。 HUD是一個擴展的MovieClip類。當用戶點擊HUD中的按鈕時,我想從主影片剪輯的舞臺上移除該對象。從類定義文件(as3)訪問主要舞臺

@curro:我認爲您的困惑可能來自我從類定義文件運行此代碼的事實。點擊一個按鈕w/i此對象應該從MainTimeline的DisplayList中刪除它。下面是從類定義文件中的代碼:

package classes { 
    import flash.display.Stage; 
    import flash.display.MovieClip; 
    import flash.events.MouseEvent; 

    public class Answers extends MovieClip { 
     public function Answers(){ 
      listen(); 
     }//constructor 

      //initiatlize variables 
     public var answersArray:Array = new Array(); 

     private function listen():void { 
      submit_btn.addEventListener(MouseEvent.CLICK, function(e:MouseEvent){ 
       answersArray.push(answer_txt.text); 
       e.currentTarget.parent.parent.stage.removeChild(this); 
      });//listen 
     }//listen 

    }//class Definition 
}//package 

跟蹤(e.currentTarget.parent.parent)被我MainTimeline和跟蹤(e.currentTarget.parent.parent.stage)出現返回主舞臺,但我不能使用removeChild w/o得到一個錯誤,我試圖強制舞臺是一個DisplayObject(它應該是)。

MainTimeline的舞臺上有什麼:單擊一個按鈕,單擊該按鈕可將Answers類的實例添加到舞臺上。

什麼是不是在代碼中的答案類的一部分? 我首先在主庫中創建了Answers作爲MovieClip對象。它有3個部分組成:

  1. 一個名爲「answer_txt」
  2. 一個「clear_btn」,用於清除answer_txt
  3. 用於提交answer_txt的文本「的submit_btn」,然後刪除整個答案從對象文本字段MainTimeline(至少,這是我想要它做的)。

回答

2

類定義是很奇怪的。看起來像是as2和as3的混合物。
嘗試這樣的:

package 
{ 
import flash.display.MovieClip; 
import flash.events.MouseEvent; 
import flash.text.*; 
import fl.controls.Button; 
public class Answers extends MovieClip 
{ 

    public var answersArray:Array = new Array(); 

    public function Answers() 
    { 
     submit_btn.addEventListener(MouseEvent.CLICK, remove); 
    } 

    private function remove(e:MouseEvent) 
    { 
     answersArray.push(answer_txt.text); 
     this.parent.removeChild(this); 
    } 

} 

}

此作品在我的電腦上。你的代碼沒有。我認爲這與聽法有關。這個班級不會安然無恙,你正在努力工作。

+0

在朋友的例子的幫助下,我找到了答案。問題是我在addEventListener方法上使用了一個匿名函數。這是我做了很多事情(僅限AS3;我沒有在AS2中發展太多)。出於某種原因,它在我自己的電腦上打破了。 – staypuffinpc

0

嘿,我不能讓代碼的頭部或尾部。 submit_btn從哪裏來?它是這個類的一個屬性嗎?那麼answer_txt呢?
你並不需要訪問e.currentTarget ...刪除「這個」簡單地說:

this.parent.removeChild(this); 
+0

當我跟蹤e.current.Target.parent.parent,我得到輸出[對象MainTimeline]。但是,當我嘗試從該時間軸中刪除一個孩子時,我得到類型強制失敗:無法將全局@ 3c0f30b1轉換爲flash.display.DisplayObject。 \t at MethodInfo-217()。有沒有辦法將其轉換爲MainTimeline的階段? (我也試過e.currentTarget.parent.parent.stage.removeChild(this),那也不管用。 – staypuffinpc

+0

我想你必須更好地解釋舞臺上的東西,你點擊什麼以及你想從舞臺上移除什麼。您可能不需要兩個父母(e.currentTarget.parent.parent),但只需要一個(e.currentTarget.parent.remove ....)但通過閱讀您的描述,很難再看到您想要做什麼。如果你可以更精確:你如何將物體添加到舞臺上,它們是嵌套的?等 – curro

+0

我希望this.parent.removeChild(this)有效,但它不(這是我第一次嘗試)。 this.parent.removeChild(this)返回錯誤「一個術語未定義,並且沒有屬性在MethodInfo-217()」 – staypuffinpc

0

如果添加了影片剪輯的階段,那麼你可以從類的簡單訪問舞臺文檔類

stage 

,否則你不能從該類訪問的階段。但是當實例化類時,您可以通過發送舞臺作爲參數來訪問它。