自定义(简单)AS3类代码不完全执行

时间:2009-10-14 09:04:20

标签: flash actionscript-3 actionscript

这个问题可能很难解决,但我不清楚。可能只是我做错了什么。我已经研究了OOP和AS3几个小时,所以我熟悉概念但不熟悉流程。这是我整理的一个项目,以加强我一直在学习的东西。

这里的目标是从库中将预先创建的动画片段的实例加载到舞台,然后在FLA的时间帧ActionScript中执行定位功能,并在AS文件的ActionScript类中执行一个函数,以调整动画片段的大小并输出一条痕迹。

我有两个文件: smileface.fla smileface.as

在smileface.fla中,我有一个驻留在我的库中的MovieClip对象。它具有以下相关属性......

Name: faceInst
Class: smileface
Base Class: null

我有一个框架(关键帧),它包含以下ActionScript:

var faceInst:smileface = new smileface();
this.addChild(faceInst);
faceInst.x = stage.stageWidth/2;
faceInst.y = stage.stageHeight/2;

在我的smileface.as文件中,我有以下代码:

package {
    import flash.display.MovieClip;
    import flash.display.Stage;
    public class smileface extends MovieClip {
        public function smileFunction() {
            this.width = stage.stageWidth/5;
            this.height = stage.stageHeight/5;
            trace("Done!");
        }
    }
}

我希望(没有理由这样做)在加载movieclip对象后,它将根据规范调整大小,然后输出跟踪。

然而,相反的是,脸部显示在舞台上,居中,但没有调整大小,根本不输出曲目。

4 个答案:

答案 0 :(得分:5)

如果你想要这个作为构造函数,它需要与文件相同的名称,笑脸而不是微笑功能

在将实例添加到stage之前创建实例时,构造函数中对stage宽度的调用将为null。你应该将它移动到添加到框架事件监听器:

package {
    import flash.display.MovieClip;
    import flash.display.Stage;
    public class smileface extends MovieClip {
        public function smileFace() {
        addEventListener(Event.ADDED_TO_STAGE, init);
        }

    public function init(ev:Event){
            this.width = stage.stageWidth/5;
            this.height = stage.stageHeight/5;
            trace("Done!");
        }
    }
}

答案 1 :(得分:2)

似乎从不调用函数smileFunction()(至少我看不到它被调用的位置)。代码应为:

var faceInst:smileface = new smileface();
this.addChild(faceInst);
faceInst.x = stage.stageWidth/2;
faceInst.y = stage.stageHeight/2;
faceInst.smileFunction();

这应该使函数运行并且笑脸在舞台上居中并进行跟踪。

答案 2 :(得分:1)

  

我希望(没有理由这样做)在加载movieclip对象后,它将根据规范调整大小,然后输出跟踪。

我认为您的期望是基于您记得看到一些代码自动调用的事实。这称为构造函数,此类方法以类名命名。因此,将smileFunction重命名为smileface应该可以解决问题。注意从构造函数访问阶段的空错误。改为使用addedToStage事件监听器。

考虑将类重命名为SmileFace - 这就是惯例。类是PascalCased,方法是camelCased。

答案 3 :(得分:0)

您忘记创建构造函数,并且必须与类名的名称相同。任何eventlistner或任何其他函数都不会调用您的函数。

  package {
    import flash.display.MovieClip;
    import flash.display.Stage;
    public class smileface extends MovieClip {
        public function smileface():void{
         smileFunction();
         }
        public function smileFunction() {
            this.width = stage.stageWidth/5;
            this.height = stage.stageHeight/5;
            trace("Done!");
        }
    }
}