函数作为构造函数执行,但不作为函数执行

时间:2009-10-18 01:52:54

标签: flash actionscript-3

我的displayandmove.as文件中包含以下代码:

package {

    import flash.display.MovieClip;

    public class FigureConstruct extends MovieClip {

        public function displayandmove() {
            this.height = stage.stageHeight/5;
            this.width = stage.stageWidth/5;
        }

    }

}

我在displayandmove.fla的第1帧上有以下内容:

var figure:FigureConstruct = new FigureConstruct();
stage.addChild(figure);
figure.x = stage.stageWidth/2;
figure.y = stage.stageHeight/2;

这些文件位于同一目录中。在我的FLA库中,我有我的数字MovieClip,它有一个“FigureConstruct”类和“flash.display.MovieClip”的基类。

目前上面的代码工作正常,因为我发现如果我将对象大小代码作为构造执行 - 使用文件名作为函数名称 - 它可以工作。

我原本打算做的是在我的AS文件中将我的函数命名为“sizeFigure()”,然后调用“figure.sizeFigure();”在“stage.addChild(图);”之后在我的FLA的第1帧。

此输出

  

错误#1006:值不是函数。

任何人都可以解释我缺少什么来让它作为一个函数执行而不是作为构造函数执行?

我想当我为库对象设置Class和Base Class指针时,我可能会搞砸......但不确定。

PS - 很抱歉,如果我滥用条款,仍然会在我离开的时候把它们钉死。

编辑:下面是原始代码,直到我将函数名称更改为文件名后才使其成为类构造函数。以上版本有效,下面没有。

displayandmove.as

package {

    import flash.display.MovieClip;

    public class FigureConstruct extends MovieClip {

        public function sizeFigure() {
            this.height = stage.stageHeight/5;
            this.width = stage.stageWidth/5;
        }

    }

}

displayandmove.fla:

var figure:FigureConstruct = new FigureConstruct();
stage.addChild(figure);
figure.sizeFigure();
figure.x = stage.stageWidth/2;
figure.y = stage.stageHeight/2;

2 个答案:

答案 0 :(得分:1)

  

错误#1006:值不是函数

error正在您的代码中的其他位置发生。该类是否具有名称value的属性(函数get / set)?你是否试图将其作为一种功能进行访问?检查您的代码value(),并将其替换为value

答案 1 :(得分:0)

这很有效,我把它设置得像你一样。

package {

        import flash.display.MovieClip;

        public class FigureConstruct extends MovieClip {

            public function displayandmove():void
            {
                height = stage.stageHeight/5;
                width = stage.stageWidth/5;
            }


            public function sizeFigure():void
            {
                x = stage.stageWidth/2;
                y = stage.stageHeight/2;
            }
        }
    }