0

我目前正在学习使用单独的 .as 文件和类,但是在阅读了很多之后,一切似乎都与我所阅读的不同。我发布这个问题是为了学习,而不仅仅是为了让代码正常工作。这里的例子是我真实项目的经过测试的简化再现。

我的文件“MyApp.fla”有 1 个以形状为背景的框架,DocumentClass 设置为“MyApp”。该库包含一个具有另一个背景形状的 1 帧符号“Page1”,其类设置为“Page1”

MyApp.as:

package  {

    trace("1: DocumentClass file, before class");
    import flash.display.MovieClip;

    public class MyApp extends MovieClip {

        trace("2: DocumentClass file, in the class")
        public var setting1:int = 2; //this is a variable which i want to be accesible to other classes, so to the pages being loaded
        private var currentPage:MovieClip; //I wanted to create this var in the constructor, but I'm afraid something will explode again :<

        public function MyApp() {
            trace("3: DocumentClass file, in constructor function");
            currentPage = new Page1;
            addChild(currentPage);
        }
    }

}

第1页.as:

package  {

    trace("4: Page1 file, before class");
    import flash.display.MovieClip;

    public class Page1 extends MovieClip {

        trace("5: Page1 file, in class, before constructor");


        public function Page1() {
            trace("6: Page1 file, in constructor")
            trace(setting1) //According to everything i read this should work since setting1 is public, but it gives me: "1120 Acces of undefined property setting1" so i commented this out for the output.
            trace(root); 
            trace(stage); //both trace null since i haven't used addChild() yet, but now i dont know how to try to reference my variables through the main timeline.
        }
    }

}

输出:

  • 5:Page1 文件,在类中,在构造函数之前
  • 4:第1页文件,课前
  • 2:DocumentClass文件,在类中
  • 1:DocumentClass文件,上课前
  • 3:DocumentClass文件,在构造函数中
  • 6:Page1 文件,在构造函数中
  • 无效的
  • 无效的

虽然两种背景形状都按预期显示,但生成的输出与我的预期完全不同。我的主要问题是:为什么我的痕迹没有排序为 1 -6?

我的下一个问题:为什么 Page1() 构造函数不能引用 public var setting1?,我假设我可以通过将 setting1 作为参数传递给 Page1() 构造函数来解决,但出于学习目的,我避免这样做。

4

1 回答 1

5

setting1 是父对象中的变量,而不是您尝试从中调用它的对象。这只是行不通。

trace(this.parent.setting1);
trace(MovieClip(parent).setting1);

用上述之一替换它应该可以工作,因为您将调用它被引用的变量形式,即父级。

下单的原因是:

5 - the class itself is imported before anything else
4 - while the class loads, it checks for additional imports
2 - after it finished importing all classes, it loads its own class
1 - again, while the class loads it check for imports
3 - after everything is loaded, it's free to run the main function of the class
6 - same as 3, but the child always walks behind the parent

请记住,在面向对象编程中,它需要在尝试对它们做任何事情之前加载所有对象(或类)。想象一下,如果 subclass.as 有一个变量,并且 class.as 在加载之前尝试访问它。

希望这可以帮助 :)。如果您需要更多详细信息,请随时询问,我只是总结了每个步骤。

于 2014-11-05T12:49:13.187 回答