0

每当我将以下代码放在电影的第一帧上时,它都可以正常工作:

var strGlobal:String = "Global"; 
function scopeTest() 
{ 
    trace(strGlobal); // Global 
} 
scopeTest(); 
trace(strGlobal); // Global

但是当我删除它并将它放在我的文档类中时,它会出错:“调用可能的未定义方法 scopeTest”“访问未定义的属性 strGlobal”

我是 actionscript 3 的新手,想知道如何更改才能使这个简单的示例在我的主文档类中工作。

4

2 回答 2

1

在与 .fla 文件相同的目录中,创建一个名为ScopeTest.as的文件并定义以下类:

package  {
    import flash.display.MovieClip;
    public class ScopeTest extends MovieClip  {
        var strGlobal:String = "Global"; 
        public function ScopeTest() {
            trace(strGlobal); // Global 
        }
    }
}

然后在您的 .fla 项目(文档类)中:

在此处输入图像描述

然后,当您运行它时,您应该跟踪“全局”以确认它有效。

于 2012-01-29T21:12:27.437 回答
0

让我们看看编写一个文档类。

第 1 步:声明包 - 包表示相对于 .fla 存储文档类的位置。如果您的文档类与 .fla 位于同一目录中,您只需编写:

package

如果它在文件夹中,则需要在package. 假设您的文档类位于名为的目录中src

package src

现在已经排序,你应该有这样的东西:

package
{
    //
}

您需要做的下一件事是导入您需要在文档类中使用的类。您将希望MovieClip在您的文档类中进行扩展,因此让我们导入它:

package
{
    import flash.display.MovieClip;
}

这就是我们需要涵盖您的示例的全部内容,所以现在我们转到所需的第三个元素,即类声明。在这种情况下,它由三个部分组成:

  1. 类命名空间 - 可以是internal(如果您只想从同一个包中的类访问您的类)或public(可在项目中的任何位置访问)。
  2. 你的班级名称。
  3. 您的课程将扩展什么 - 在本例中为 MovieClip。

总之,您的将如下所示:

public class Document extends MovieClip

现在您将拥有如下所示的内容,这意味着您可以开始添加propertiesand methods

package
{
    import flash.display.MovieClip;

    public class Document extends MovieClip
    {
        //
    }
}

您要做的第一件事是constructor为您的班级创建一个。在创建此类的实例时调用构造函数,或者在您的情况下是文档类,立即调用。

构造函数是通过创建一个与其包含类同名的方法来定义的。构造函数也必须是public并且什么都不返回。这是带有空构造函数的新代码:

package
{
    import flash.display.MovieClip;

    public class Document extends MovieClip
    {
        // Constructor
        public function Document()
        {
            //
        }
    }
}

下一步是创建属于您的类的属性。在您使用的示例中strGlobal:String,让我们添加它。属性通常位于类声明的下方和构造函数的上方。属性由四部分组成:

  1. 命名空间 - 这决定了您的财产的可访问性。如果您省略它,则默认值为internal. 目前,这些是基础知识:
    • public- 你的属性可以从任何引用你的类实例的地方访问。
    • private- 你的属性只能从类中访问 - 起初这似乎没用,但最终你会发现自己主要使用它。
    • protected- 您的属性可在扩展您的类的类中访问。
    • internal- 可以从同一包中的类访问您的属性。
  2. 您的物业名称。
  3. 您的房产类型。
  4. 您的财产价值。

在您的情况下,strGlobal将如下所示:

public var strGlobal:String = "Global";

让我们将其添加到您的文档类中:

package
{
    import flash.display.MovieClip;

    public class Document extends MovieClip
    {
        // Properties
        public var strGlobal:String = "Global";

        // Constructor
        public function Document()
        {
            //
        }
    }
}

接下来,您将要scopeTest()根据您的问题创建您的方法。方法由5部分组成:

  1. 命名空间 - 方法使用与属性相同的命名空间(见上文)。
  2. 方法名称。
  3. 方法参数。
  4. 返回类型。
  5. 内容。

scopeTest()没有任何参数,也没有返回任何东西,所以它看起来像这样:

public function scopeTest():void
{
    trace(strGlobal);
}

方法通常属于构造函数下方的任何位置,所以现在让我们将其插入:

package
{
    import flash.display.MovieClip;

    public class Document extends MovieClip
    {
        // Properties
        public var strGlobal:String = "Global";

        // Constructor
        public function Document()
        {
            //
        }

        // Output the value of strGlobal
        public function scopeTest():void
        {
            trace(strGlobal);
        }
    }
}

现在一切都准备好了,您将能够scopeTest()从构造函数中调用。因为构造函数被立即调用,您应该Global在输出面板中看到打印(假设您已在 Flash IDE 中正确链接到它)。

希望这可以帮助。

于 2012-01-30T04:54:01.640 回答