Actionscript 3 AS3在构造函数中通过类';s参数,但为空(?)

Actionscript 3 AS3在构造函数中通过类';s参数,但为空(?),actionscript-3,class,constructor,Actionscript 3,Class,Constructor,我试图用主文档的代码向stage添加两个对象。在第二个添加的对象中,我尝试将第一个对象的类作为参数添加到第二个对象中。这样,第二个对象(简介)可以在移动到游戏的核心(第一个对象)之前首先执行其功能。但是,发送到参数的对象似乎为null或与第一个对象的类没有直接连接(例如,我不能用第二个对象修改第一个对象的任何变量或更改其可见性等) 主文档的代码: //first object : var gameScreen = getDefinitionByNa

我试图用主文档的代码向stage添加两个对象。在第二个添加的对象中,我尝试将第一个对象的类作为参数添加到第二个对象中。这样,第二个对象(简介)可以在移动到游戏的核心(第一个对象)之前首先执行其功能。但是,发送到参数的对象似乎为null或与第一个对象的类没有直接连接(例如,我不能用第二个对象修改第一个对象的任何变量或更改其可见性等)

主文档的代码:

//first object :            
            var gameScreen = getDefinitionByName("Game") as Class;
            gameScreen.x = 0;
            gameScreen.y = 0;
            addChild(new gameScreen() as DisplayObject);

//second object :
            var introScreen = getDefinitionByName("Intro") as Class;
            introScreen.x = 0;
            introScreen.y = 0;
            addChild(new menuScreen(gameScreen) as DisplayObject);
            gameScreen.visible = false;
    //the goal is to make gameScreen not visible, but it is still visible
第一个对象的类中没有影响此过程的实际代码

Intro的代码(第二个对象):


有没有关于如何解决这个问题的线索?还是没有解决办法。解决方法是将介绍(第二个对象)集成为游戏的一部分(第一个对象)。谢谢你能提供的任何帮助

我不明白你为什么要用你现有的方式来处理这些类,但你可以直接解决它们。您也不必将其
x,y
值归零,因为(作为显示对象)它们默认为零

var gameScreen:Game = new Game();
addChild(gameScreen);

var introScreen:Intro = new Intro();
addChild(introScreen);

// When you're ready to hide it, simply remove from the DisplayList
removeChild(gameScreen);
在本例中,隐藏(或添加/删除)游戏屏幕也是令人困惑的。作为一个代码块,它将一次性创建和隐藏它,这就引出了一个问题:为什么要首先添加它

你的介绍课:

package {
    public class Intro extends Game {
        public function Intro() {

        }
    }
}
总而言之,我仍然不清楚你在这一切中的实际目标是什么。我可以说的是,在你尝试的地方:

addChild(new menuScreen(gameScreen) as DisplayObject);
menuScreen
从不导入
Intro
的当前代码接受一个
作为其构造函数参数,但是您没有向Intro类传递任何内容,也没有实例化它


补遗 如果直接调用类中的代码(例如,Math.floor()是Math类中的一个函数,但不必先实例化它才能使用它),或者在实例化类时(在本例中,它的构造函数是运行的),则会运行类中的代码。这不需要将其添加到DisplayList(即Stage)中,代码才能运行;在屏幕上显示它是事后才想到的

假设我们有一个名为“Foo”的类:

我们可以首先调用类上的
bar()
,而不必实例化它。我们还可以实例化它的一个副本,然后调用构造函数。但这两项行动都不需要把它带到舞台上

import Foo;

Foo.bar() // traces: "You can call me anytime."
var myThing:Foo = new Foo(); // traces: "Constructor called."
addChild(myThing); // traces: "You can only call me from within the class."
为了回答您的问题,将按照上面的演示执行,其目的是“使外部定义的类和包可用于您的代码”。除了您的其他类之外,您还没有共享
menuScreen
的外观。这让我回到了我最初的问题:你到底想做什么


尽管如此,我希望这有助于澄清代码的工作原理。

感谢您的回复。如果删除了对象
removeChild
,则该对象无法运行其任何操作?或者在添加时再次运行其构造函数?否则,
objectName.visible
addChild(objectName)
之间有什么区别?您还说,
menuScreen
没有导入,我没有向类传递任何内容或实例化它-我想这些是我想要解决的问题,但找不到相应的词语。如何正确导入或传递/实例化它?
menuScreen
只是一个带有按钮的界面屏幕,就像一个菜单。因此,用户基本上可以在不同的部分之间导航,例如
游戏
选项
等。当
菜单屏幕
对玩家仍然可见时,我还不希望游戏启动,但是我仍然在
游戏屏幕
上运行功能(第一个对象)但是我不想让玩家看到
游戏屏幕
,这就是为什么我想将其可见性设置为
false
。我将试试你的建议,明天早上把这门课引进来。再次感谢您抽出时间回复。
package {
    public class Foo extends Sprite {
        import flash.events.Event;

        public function Foo() {
                trace("Constructor called.");
                addEventListener(Event.ADDED_TO_STAGE, saySomething);
        }

        public static function bar():void {
                trace("You can call me anytime.");
        }

        private function saySomething(e:Event):void {
                trace("You can only call me from within the class.");
        }
    }
}
import Foo;

Foo.bar() // traces: "You can call me anytime."
var myThing:Foo = new Foo(); // traces: "Constructor called."
addChild(myThing); // traces: "You can only call me from within the class."