每当我将以下代码放在电影的第一帧时,它都工作得很好:
var strGlobal:String = "Global"; 
function scopeTest() 
{ 
    trace(strGlobal); // Global 
} 
scopeTest(); 
trace(strGlobal); // Global但是当我移除它并将其放入我的文档类中时,它会出错:“调用一个可能未定义的方法scopeTest”“访问未定义的属性strGlobal”
我是ActionScript3的新手,想知道如何更改才能使这个简单的示例在我的主文档类中工作。
发布于 2012-01-30 05:12:27
在.fla文件所在的目录中,创建一个名为ScopeTest.as的文件,并定义以下类:
package  {
    import flash.display.MovieClip;
    public class ScopeTest extends MovieClip  {
        var strGlobal:String = "Global"; 
        public function ScopeTest() {
            trace(strGlobal); // Global 
        }
    }
}然后在您的.fla项目(document类)中:

然后,当你运行它的时候,你应该得到“全局”的跟踪,以确认它的工作。
发布于 2012-01-30 12:54:02
让我们来看看如何编写document类。
步骤1:声明package - package表示文档类相对于.fla的存储位置。如果您的document类与.fla位于同一目录中,则只需编写:
package如果它在一个文件夹中,你需要在package之后添加它。假设您的文档类位于一个名为src的目录中
package src既然已经对其进行了排序,那么您应该拥有如下内容:
package
{
    //
}您需要做的下一件事是导入需要在document类中使用的类。您将希望在文档类中扩展MovieClip,因此让我们导入它:
package
{
    import flash.display.MovieClip;
}这就是我们要介绍的示例,现在我们转到所需的第三个元素,即类声明。在本例中,它由三个部分组成:
internal (如果只希望可以从同一包中的类访问)或public (可以从project).总而言之,您的代码将如下所示:
public class Document extends MovieClip现在,您将拥有类似以下内容的内容,这意味着您可以开始添加properties和methods
package
{
    import flash.display.MovieClip;
    public class Document extends MovieClip
    {
        //
    }
}您要做的第一件事是为您的类创建一个constructor。该构造函数在创建该类的实例时调用,或者在本例中为document类时立即调用。
构造函数是通过创建一个与其包含类同名的方法来定义的。构造函数也必须为public,并且不返回任何内容。下面是您的新代码,其中包含一个空的构造函数:
package
{
    import flash.display.MovieClip;
    public class Document extends MovieClip
    {
        // Constructor
        public function Document()
        {
            //
        }
    }
}下一步是创建属于您的类的属性。在您的示例中,您使用了strGlobal:String,因此让我们添加它。属性通常直接位于类声明的下方和构造函数的上方。属性由四个部分组成:
internal。目前,以下是基本信息:public -可从引用class.private实例的任何位置访问您的属性-您的属性只能从类内访问-这在一开始似乎没有用,但最终您会发现自己主要使用this.protected -您的属性可在扩展class.internal的类中访问-您的属性可从同一package.中的类访问
在您的示例中,strGlobal将如下所示:
public var strGlobal:String = "Global";让我们将其添加到您的document类:
package
{
    import flash.display.MovieClip;
    public class Document extends MovieClip
    {
        // Properties
        public var strGlobal:String = "Global";
        // Constructor
        public function Document()
        {
            //
        }
    }
}接下来,您将根据您的问题创建您的方法scopeTest()。方法由5部分组成:
name。
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中正确地链接到它)。
希望这能有所帮助。
https://stackoverflow.com/questions/9056745
复制相似问题