2014-11-14 79 views
0

我有一個外部的ActionScript類,這就是所謂Menu.as,試圖訪問使用下面的代碼的階段目標:對象在舞臺上不能訪問從外在

MovieClip(parent).fullmenu_mc.x = 80; 

雖然程序編譯,我得到錯誤#1009:無法訪問屬性或空對象引用的方法

我不明白這是如何可能的,因爲對象已經在舞臺上,只需要訪問。我以某種方式錯誤地訪問對象?

我也試過裏面Menu.as下面的代碼:

import EngineClass; 
var engine : EngineClass = new EngineClass(); 
engine.fullmenu_mc.x = 80; 

可以得到相同的運行時錯誤。任何想法都歡迎!

+1

好像'fullmenu_mc'不存在。 – DodgerThud

+0

這就是錯誤使它看起來像什麼,但它在舞臺上的整個時間...檢查實例,一切似乎正確 – user3600741

+1

循環顯示列表並跟蹤所有對象的名稱。 – BotMaster

回答

0

短版本:

基本上,你首先需要安裝作用的參考名稱您在舞臺上影片剪輯的變量。如果您希望導入其他Class文件也可以從它們自己的Class代碼控制此變量(因此也影響動畫片段),您可以改爲使其成爲public static變量。我們更新了定義以知道它表示的舞臺對象的實例名稱,因爲它們可以用來表示舞臺+舞臺項目(因爲Flash會先處理代碼然後製作Stage +項目)現在
menuMC = DisplayObjectContainer(getChildByName("fullmenu_mc")) as MovieClip;

你可以通過任何引入外部類使用像線更新:Main.menuMC.x = 200;(其中主要是類持有的定義的名稱是什麼menuMC手段)。

長的版本:

假設你有一些設置是這樣的。在舞臺上

  • Main.as =您的FLA的文檔類附着保持主要運行代碼
  • External.as =一些其他的外部類文件,也將文件對象的

    • fullmenu_mc =實例名控制 舞臺上MC

    注:如果你的代碼是時間軸,而不是(Main.as)文檔類文件上牛逼我知道更新(如果可能),但上面類設置會更容易些......

    Main.as。(定義變量,並運行一個函數是外部類中)

    package 
    { 
        import flash.display.MovieClip; 
        import flash.display.*; 
        import flash.events.*; 
        import External; 
    
        public class Main extends MovieClip 
        { 
         public var ExtClass : External = new External; //init the external class 
         public static var menuMC : MovieClip = new MovieClip(); //reference to on-stage MC 
    
    
         public function Main() 
         { 
          if (stage != null) { Init(); } //do Init function if SWF loaded ok... 
          else { addEventListener (Event.ADDED_TO_STAGE, Init); } //or do the function when ready.. 
    
         } 
    
         //If stage is available then we can now do this 
         public function Init (event:Event = null) :void 
         { 
          //update menuMC to know it means some item "X" on stage. "X" is instance name 
          menuMC = DisplayObjectContainer(getChildByName("fullmenu_mc")) as MovieClip; 
    
          trace("menuMC is type : " + menuMC); //if ok then traces [object MovieClip] 
    
          menuMC.x = 10; //just for testing 
          ExtClass.accessTest(); //run some function in External class 
    
         } 
    
    
        } 
    
    } 
    


    現在在外部。作爲我們可以控制fullmenu_mc(現稱menuMC)像這樣..

    public function accessTest() :void 
    { 
        //access stage item using Static Variable from Main Class 
        Main.menuMC.x += 500; 
        trace("Full_menu... new x-pos is : " + Main.menuMC.x); 
    
    } 
    
  • +0

    謝謝VC.one,寫得非常好,並且易於遵循!我把它設置爲像你提到的類,時間軸上沒有代碼。代碼完美編譯,但是當External.as中的函數被調用時,我得到錯誤#1069:在com.objects.Menu上找不到屬性fullmenu_mc,並且沒有默認值。我甚至不知道從哪裏開始...(com.objects.Menu是我的外部類的名稱和位置) – user3600741

    +0

    看着我發佈的Main.as代碼,你是什麼取代了'public static var menuMC '帶?這成爲您在Menu.as中必須使用的變量名才能訪問動畫片段。另外'property fullmenu_mc not found'似乎很奇怪。你可以發佈導致錯誤的行嗎? –