2012-01-31 70 views
1

所以我最近了解到,通過將一個類導入到我的主類中,我可以從任何其他類訪問它的功能。但是....導入類中的一個函數需要將顯示對象添加到舞臺上。我很好地訪問了靜態函數,但它不能將對象添加到舞臺上。它甚至不認可addChild。這是因爲它不在顯示列表中嗎?AS3可以添加對象到舞臺的全局類

我在這裏錯過了什麼?你們將如何解決這個問題。我很親密,但迄今爲止!

代碼是這樣的:

package { 

import flash.display.Sprite; 
import PopHandler; 

public class MyMainClass extends Sprite { 
    public function MyMainClass():void { 
     PopHandler.LaunchPop(); 
    } 
} 

}

這是進口的一類,沒有到舞臺添加任何東西。

package { 
import flash.display.Sprite; 

public class PopHandler extends Sprite { 

    public function PopHandler():void { 

    } 

    public static function LaunchPop() { 
     var bp:BreakPop = new BreakPop(); 
     bp.x = 500; 
     bp.y = 347; 
     addChild(bp); 
    } 
} 

}

BreakPop是在我的庫中的項目。

在此先感謝。

+0

對於一個類來訪問「舞臺」它必須是對別人的階段,它是空的。對於訪問「addChild」或任何顯示類型函數的類,它必須繼承通常通過擴展精靈來完成的顯示對象方法。 – 2012-01-31 16:19:48

+0

我的課程擴展了精靈,並被導入到主類中。進口聲明本身是不夠的?這是否意味着它不在舞臺上? – 2012-01-31 16:24:17

+0

如果有幫助,我已經用代碼更新了我的問題。 – 2012-01-31 16:59:59

回答

3

既然你使用靜態方法,您的PopHandler不是精靈的實例,因此無權訪問stage屬性。如果你想離開它作爲一個靜態方法,那麼你基本上可以跳過extends Sprite,只是去public class PopHandler {

說出來的方式,這裏有一個簡單的解決你的問題:爲什麼不通過DisplayObjectContainer你想將BreakPop添加爲您的靜態方法的參數?

例子:

public static function LaunchPop(target:DisplayObjectContainer) { 
    var bp:BreakPop = new BreakPop(); 
    bp.x = 500; 
    bp.y = 347; 
    target.addChild(bp); 
} 

然後調用它像這樣(舉例):

PopHandler.LaunchPop(this); // <-- adding to current object 
PopHandler.LaunchPop(root as DisplayObjectContainer); // <-- adding to root 
PopHandler.LaunchPop(stage); // <-- adding to stage 
+0

謝謝你。我會看看它是否適合我。 – 2012-01-31 21:22:22

+0

這工作。非常感謝:) – 2012-02-01 09:57:29

+0

完美的作品,非常感謝 – Delcasda 2014-02-03 21:20:54

3

延長您的主文檔類,並添加有靜止無功,不是在初始化階段assing:

public class Main extends MovieClip { 

    public static var stage:Stage; 

    public function Main():void { 
    Main.stage = stage; 
    } 
} 

,然後隨時隨地應用程序,你可以訪問階段:

Main.stage.addChild(element) 
+0

謝謝你。如上所示,我會看看它是否適用於我:) – 2012-01-31 21:22:14

+0

此方法也起作用。它也會非常方便。非常感謝。 – 2012-02-01 09:57:08