2012-01-31 90 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