Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 类需要能够在主AS3中看到变量_Actionscript 3_Flash_Flashdevelop_Flash Cs6 - Fatal编程技术网

Actionscript 3 类需要能够在主AS3中看到变量

Actionscript 3 类需要能够在主AS3中看到变量,actionscript-3,flash,flashdevelop,flash-cs6,Actionscript 3,Flash,Flashdevelop,Flash Cs6,我正在使用FlashCS6和FlashDevelop以及我能找到的所有类似问题来处理访问其他类中的内容的类,但不是主要的类,所以这里是: 我的main初始化了我在Flash中创建的级别,如下所示: public class Main extends MovieClip { private var MazeNr1:Level = new Level(); public function Main():void { if (stage) init(); else addEven

我正在使用FlashCS6和FlashDevelop以及我能找到的所有类似问题来处理访问其他类中的内容的类,但不是主要的类,所以这里是: 我的main初始化了我在Flash中创建的级别,如下所示:

public class Main extends MovieClip 
{
private var MazeNr1:Level = new Level();

public function Main():void 
{
    if (stage) init();
    else addEventListener(Event.ADDED_TO_STAGE, init);
}

private function init(e:Event = null):void 
{
    removeEventListener(Event.ADDED_TO_STAGE, init);
    addChild(MazeNr1);
}
}

我需要我的实例化级别变量(MazeNr1)被项目中的其他类看到,这样我就可以使用它的参数(比如宽度和高度,它们与stage.parameters不同)。谢谢。

将变量设置为“public”:

public var MazeNr1:Level = new Level();

然后您可以从类外访问它。

假设
Main
是您的文档类,您可以通过几种不同的方法来实现

  • 正如另一个答案中提到的,将变量公开。然后像这样访问它:

    Main(root).MazeNr1
    
  • 将其设为静态变量

    public static var MazeNr1:Level;
    
    public function Main():void 
    {
        MaxeNr1 = new Level();
        //rest of your constructor code
    }
    
    然后,您可以在任何范围内访问它,只需执行以下操作:

    Main.MazeNr1
    

  • 可能的重复项对于
    Main
    没有特殊的规则,只不过它是先调用的。你提到的其他答案应该适用于这里,你所说的对MazeNzr1、Main和其他类的操作就是所谓的循环引用。Main包含类X(直接或通过另一个类),类X引用Main。不惜一切合理代价避免循环引用!从长远来看,他们会伤害你。相反,您应该使用Main将MazeZr1的引用传递给其他类,这些类将保存它们自己对MazeZr1的引用,并且永远不必使用循环引用返回Main。或者使用回调或某种类型的事件监听器(这也将删除循环引用)。这一切都很好。但我现在将尝试通过一个参考模拟来找出正确的方法。谢谢你,好心的先生。顺便说一句,这不是一个简单的解决办法。此外,仅仅为了从另一个类访问而公开内容是一种糟糕的设计实践。“一个类需要能够在主AS3中看到一个变量”。答案简明扼要地说明了这一点。公开访问属性是一种非常好的做法。对于FlashDevelop项目中的AS3来说,这是行不通的。只有当我将其声明为static时,它才使其可见。public关键字使实例变量可以在类的实例上访问。静态变量(也称为类变量)是全局变量的同义词,为了保持代码结构良好,最好尽量少用全局变量。要了解有关此主题的更多信息,请研究“类变量与实例变量”。