这个问题可能很难解决,但我不清楚。可能只是我做错了什么。我已经研究了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对象后,它将根据规范调整大小,然后输出跟踪。
然而,相反的是,脸部显示在舞台上,居中,但没有调整大小,根本不输出曲目。
答案 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!");
}
}
}